みなさん cdしていますか? 私はしています。
ところで普段からzshを使ってcdをすると、補完とかを使ってそこそこ快適にできますが、それでも「普段使うあのディレクトリにパット移動したい…」 などのケースが出てくると思います。
大体この際に対応は、zshにpecoとfast_cdあたりを組み合わせて行う運用ですが、 この場合は fast_cdが覚えているディレクトリ数が少ないため 頑張って移動しようとしても、候補のディレクトリが4つとかいう悲しい状態になります。
ということで、zshを書いていきましょう。 まずは、移動したディレクトリを覚える設定を書きます
export dirfile="$HOME/.dirfile" function cd { builtin cd "$@" echo $PWD >>| $dirfile }
zshのcdのhookを使えという声もありますが、まずは無難にcdしたら $dirfile
に設定しているファイルに、ディレクトリパスを追記していきます。
ちなみに、このファイルを活用すると、コマンド一発で直前のディレクトリに移動するものを書けます。
function hd { cd $(cat $dirfile | tail -1) }
こうしておくと、複数端末を開いてエイヤする際にかなり便利です。
ちなみに $dirfile
にゴミがたまってきたら、次のコマンドでuniqにします
function dirfileuniq { local new_dirfile=$(cat $dirfile | sort -rn | uniq) echo $new_dirfile >| $dirfile }
はい。そしてディレクトリの移動ですが、どこかの記事で見たpecoの活用術の設定を活用します。
function peco-dir-jmp { which peco z > /dev/null if [ $? -ne 0 ]; then echo "Please install peco and z" return (1) fi local res=$(cat $dirfile | sort -rn | uniq | peco) if [ -n "$res" ]; then BUFFER+="cd $res" zle accept-line else return 1 fi } zle -N peco-dir-jmp bindkey '^[pz' peco-dir-jmp
こうしておくと、 Ctrl-pzでよしなにディレクトリ移動が可能となります。 便利でしたね。現場からは以上です