fd を使用してホームフォルダ内のすべてのディレクトリを一覧表示します。

fd を使用してホームフォルダ内のすべてのディレクトリを一覧表示します。

cd私はホームフォルダ内の任意のディレクトリにすばやく移動するシェル関数を使用してプログラムしようとしています。fdfzf

これが私が今まで持っているものです

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

おすすめ記事