cd
私はホームフォルダ内の任意のディレクトリにすばやく移動するシェル関数を使用してプログラムしようとしています。fd
fzf
これが私が今まで持っているものです
function fdcd() {
cd "$(fd --type d --ignore-file ~/.config/fd/ignore --hidden | fzf)"
}
これには2つの問題があります。
1)私のホームフォルダのすべてのディレクトリではなく、現在の作業ディレクトリに含まれているディレクトリだけを一覧表示します。
2)これが私のシェルのバグであるかどうかはわかりませんが、このコマンドを使用した後、私のシェルプロンプトは新しいディレクトリにすぐには更新されません。代わりに、更新する前にコマンド(空のディレクトリでも)を実行する必要があります。迷惑です。
助けてくれてありがとう。
ベストアンサー1
fdcd() {
local dir
dir=$(
cd &&
fd -0 --type d --ignore-file ~/.config/fd/ignore --hidden |
fzf --read0
) && cd ~/$dir
}
reset-prompt
プロンプトが自動的に更新されない理由は、行エディタに入った後にzleウィジェットが明示的に再描画(/clear-screen
ウィジェット)を要求した場合、または無効化後に返されたときにのみプロンプトが再計算され、再描画されることに注意してください。 display( zle -I
) またはシェルが一部の非同期イベントを処理するとき。
したがって、fdcd
関数をカスタムウィジェットまたはカスタムウィジェットの一部として呼び出す場合は、ディレクトリの変更をプロンプトに反映するzle
ようにプロンプトを再計算するように要求する必要があります。
fdcd() {
local dir
dir=$(
cd &&
fd ${NUMERIC:+-d$NUMERIC} -0 --type d \
--ignore-file ~/.config/fd/ignore --hidden |
fzf --read0
) && cd ~/$dir || return
if zle; then
# allow fdcd to run inside and outside zle
zle reset-prompt
fi
}
zle -N fdcd
bindkey '\es' fdcd
$NUMERIC
ここでは、検索の深さを制限するためにパラメータも使用されます。たとえば、検索を深さ2に制限するには、Alt++を入力できます。2 AltS