Pecoで(ちょっと)汎用ディレクトリ選択function(zsh専用)


Pecoが流行っているので使ってみたらよい感じだったので開始してみました。
現状、多くのスニペットが特定のコマンド専用っぽい感じだったので、変化球を。

~/.zshrc
function peco-dfind() {
    local current_buffer=$BUFFER
    # .git系など不可視フォルダは除外
    local selected_dir="$(find . -maxdepth 5 -type d ! -path "*/.*"| peco)"
    if [ -d "$selected_dir" ]; then
        BUFFER="${current_buffer} \"${selected_dir}\""
        CURSOR=$#BUFFER
        # ↓決定時にそのまま実行するなら
        #zle accept-line
    fi
    zle clear-screen
}
zle -N peco-dfind
bindkey '^x^f' peco-dfind

上記コマンドを.zshrcに入れておくことで、cdまで打ったあと、^x^fを打つことで5階層下までのディレクトリ一覧を表示してpecoに渡します。あとは、絞り込みをして決定。 cdだけでなく、findやlsなど、どのコマンドにも適用可能です。

更新

なにも入力がない状態で、^dを受け取るとzshがログアウトを実行してしまうため、もともと^x^dとしていたショートカットを^x^fに更新しました。