Bashの逆検索履歴(Ctrl-r)のようなものはありますか?
ジャンプしたい深いフォルダー階層がいくつかあるので、reverse-search-historyのようなものを使用したいのですが、フォルダー名のみを検索し、絶対パスを提供します。
基本的に、!?
を使用した場合と同様の結果が得られますが、前にcdがあるコマンドのみが一致し、結果とフルパスをステップ実行できます。
これまでのところ、私が見つけた最良の解決策は bashmarks です。
autojump を見てください:
最もよく使用されるシェルコマンドの1つは「cd」です。私の友人の間で簡単な調査を行ったところ、彼らが入力したすべてのコマンドの10〜20%が実際にはcdコマンドであることがわかりました残念ながら、cdを使用してシステムのある部分から別の部分にジャンプするには、ほぼ完全なパスを入力する必要があります。これはあまり実用的ではなく、多くのキーストロークを必要とします。
autojumpは、ファイルシステムをナビゲートするためのより高速な方法です。コマンドラインから最もよく使用するディレクトリのデータベースを維持することで機能します。 jumpstatコマンドは、データベースの現在の内容を表示します。データベースが使用可能になる前に、少し作業する必要があります。データベースが適切に完成したら、次のように入力して、一般に「cd」されたディレクトリに「ジャンプ」できます。
j dirspec
有る
cd -
これは、「cd [space] [hyphen]」コマンドです。これは、前のディレクトリに移動します。基本的に「履歴の深さ1」です。 「cd-」を繰り返すと、2つのディレクトリ間を行き来します。
マンページの引用:
次のオペランドがサポートされます:[...]
[ハイフン]がオペランドとして使用される場合、これはコマンドと同等です:
cd "$OLDPWD" && pwd
残念ながら、実際の組み込みのディレクトリ履歴は知りません。
bashにはpushd/popd/dirsがあります。これを.bashrcに入れて、ディレクトリをbashのスタックに自動プッシュします。
#let cd also pushd directories into stack. Use popd to reverse stack
function cd ()
{
if [ -e $1 ]; then
pushd $1 &> /dev/null #dont display current stack
fi
}
popd
を使用してこれらをポップし、dirs
を使用してスタックを表示します
私は z-jump で良い経験をしました。これは、パスをステップスルーするのではなく、最終的な宛先に対してのみですが、完了を許可します。ただし、タブの完了時にフルパスが表示されます。
ディレクトリ履歴をすばやく移動するためにltcd
をお勧めします。
生活を楽にする次の機能を提供します。
私自身の経験を活かすために、私はこの要件に対処するための簡単なスクリプトを少し前に書きました。これは、組み込みのcdコマンドを、履歴ファイルに新しいディレクトリの場所を追加する単純な関数でオーバーライドします。pythonスクリプトを使用して、bashの逆コマンド検索のように、検索語を入力するとディレクトリの順序付きリストを動的に更新するbashインターフェースを提供します。
好奇心旺盛な方は git-hub で入手できます。
script を作成しましたが、 oh-my-zshのdirs -v
bashで動作するコマンド。 oh-my-zsh を使用したことがある場合は、コマンドdirs -v
によって提供されるディレクトリ履歴が毎回リセットされることに気づいたかもしれませんターミナルを出るとき。ただし、この script を使用しても発生しません。
機能:
最近使用した10個のディレクトリのリストをd
で表示します。
リスト内のディレクトリの番号を入力して、リスト内の任意のディレクトリにジャンプします。 10番目のディレクトリにジャンプするには、10ではなく0を使用する必要があります。
v
( vim )を使用してファイルまたはo
( xdg-open )は、そのディレクトリからファイルを開きます。または、必要に応じて、ディレクトリにアクセスするたびに。
あなたはそれを実際に見ることができます ここ 。
cd
、pushd
、popd
組み込みコマンドを使用して、独自のdirs
コマンドを作成できます。
cd --
(現在の履歴をリスト)
cd -num
(numディレクトリに移動)
cd -
(前のディレクトリに移動)
function cd()
{
local hnum=16 # number of entries
local new_dir index dir cnt
if ! [ $# -eq 0 ]; then
if [[ $# -eq 2 && $1 = "--" ]]; then
shift
else
if ! { [ $# -eq 1 ] && [[ $1 =~ ^(-[0-9]{,2}|-|--|[^-].*)$ ]] ;}
then
builtin cd "$@"
return
fi
fi
fi
[ "$1" = "--" ] && { dirs -v; return ;}
new_dir=${1:-$HOME}
if [[ "$new_dir" =~ ^(-[0-9]{,2}|-)$ ]]; then
index=${new_dir:1}
[ -z "$index" ] && index=1
new_dir=$(dirs -l +$index) || return
fi
pushd -- "$new_dir" > /dev/null || return
popd -n +$hnum &> /dev/null
new_dir=$PWD cnt=1
while dir=$(dirs -l +$cnt 2> /dev/null); do
if [ "$dir" = "$new_dir" ]; then
popd -n +$cnt > /dev/null
continue
fi
let cnt++
done
}
export -f cd
さて、あなたはあなたの~/.bashrc
にこのコードスニペットを追加することができました、それは
カスタムcdコマンドを提供します
function cd ()
{
exists=false
for dir in "${CDHIST[@]}"; do
[ "$dir" == "$1" ] && {
exists == true
break
}
done
$exists || {
len=${#CDHIST[@]}
${CDHIST[$len]} = "$1"
}
builtin cd "$1"
}
cd履歴検索コマンドを提供します。
function cdhist ()
{
#TODO: Make this magical.
for dir in "${CDHIST[@]}"; do
echo "$dir"
done
}
もちろん、私が提供したcdhistコマンドは非常に基本的なものであり、望んだものではありません。しかし、caseステートメントまたはパラメーター拡張を使用して、希望するものに似たものを実現することが考えられます。
cd /path/to/mydir
の一意のサブストリングに基づいて完全な/path/to/unique/mydir
コマンドを追加するために使用できる「プログラム可能な補完」関数を追加することもできますが、その方法ではcd unique/mydir<tab>
を入力する必要があります。