fish shell と percol で良く利用するディレクトリに飛ぶ
なんとなく fish に移ってみました。
これまでよく使うディレクトリに移動するために zsh + autojump で j として使っていたのですが、 fish のタブ補完では j 入力後にどんな候補があるのか補完してもらえず どうしたものか考えていました。
コマンド履歴の補完は mooz さんの percol
mooz/percol https://github.com/mooz/percol
を使って
bpinto/oh-my-fish https://github.com/bpinto/oh-my-fish
の中にあった percol_select_history を利用することにしました。
じゃあということで fish で percol を使って 良く利用するディレクトリに飛べるよう function を作ってみました。
zsh 用は
percol で z / autojump のようにディレクトリ高速ジャンプ - Slip Ahead Logging http://stillpedant.hatenablog.com/entry/percol-cd-history
にありますのでこれを fish 用に改造して
set CD_HISTORY_FILE $HOME/.cd_history_file # cd 履歴の記録先ファイル # percol を使って cd 履歴の中からディレクトリを選択 # 過去の訪問回数が多いほど選択候補の上に来る function percol_cd_history sort $CD_HISTORY_FILE | uniq -c | sort -r | sed -e 's/^[ ]*[0-9]*[ ]*//' | percol | read -l percolCDhistory if [ $percolCDhistory ] # commandline 'cd ' # commandline -i $percolCDhistory echo 'cd' $percolCDhistory cd $percolCDhistory echo $percolCDhistory commandline -f repaint else commandline '' end end # キーバインドの追加 ############################################ function fish_user_key_bindings bind \cx percol_cd_history # 以下他のキーバインド end
加えて cd 系のコマンドで return する前に
echo $PWD >> $CD_HISTORY_FILE # percol_cd_history 用
してやると、ひとまずやりたいことが出来るようになりました。
cd コマンド実行時に移動先のパスを $CD_HISTORY_FILE へ書き出して保存しています。 cd した後に ls してほしいので
commandline -f repaint
が無いとキーバインドから実行した場合に画面が止まるようでした。
また、上の function では percol で選択するとすぐに cd していますが、 if 文の中のコメントアウトを逆にすると 入力だけしてくれて cd を実行するにはエンターが必要なように変わります。 履歴から補完して入力後に編集する機会が多いのであれば こちらを利用した方が便利なように思います。
commandline 'cd ' commandline -i $percolCDhistory # echo 'cd' $percolCDhistory # cd $percolCDhistory # echo $percolCDhistory # commandline -f repaint