こんな感じ
###何をしているか
-
auto_cd
でも普通のcd
でも、ディレクトリ移動時にそのディレクトリのログを溜め込む - 引数なしでEnterを押せば、ログをもとに選択的インターフェイスで移動先をサジェスト
- 普通のcdみたいにも使える
上のgifでは、fzfを使用しています。また、powered_cd
をc
にエイリアスしています。
ログについては、同じディレクトリは二つ以上溜めないようになっていて、新しい順からサジェストされるためあまり無駄はないと思います。
###コード
以下を.zshrcとかにコピペしてもらえば動くと思います。
function chpwd() {
powered_cd_add_log
}
function powered_cd_add_log() {
local i=0
cat ~/.powered_cd.log | while read line; do
(( i++ ))
if [ i = 30 ]; then
sed -i -e "30,30d" ~/.powered_cd.log
elif [ "$line" = "$PWD" ]; then
sed -i -e "${i},${i}d" ~/.powered_cd.log
fi
done
echo "$PWD" >> ~/.powered_cd.log
}
function powered_cd() {
if [ $# = 0 ]; then
cd $(gtac ~/.powered_cd.log | fzf)
elif [ $# = 1 ]; then
cd $1
else
echo "powered_cd: too many arguments"
fi
}
_powered_cd() {
_files -/
}
compdef _powered_cd powered_cd
[ -e ~/.powered_cd.log ] || touch ~/.powered_cd.log
fzf
のところは使っているもの(pecoとかpercolとか)に変えてください。
あとgtac
ってのはtac
のGNU版で、OS Xにはデフォルトでgtac
が入っているのでgtac
にしています。他のOSの方はtac
にしてください。
あとcとか短いコマンドにエイリアスすると便利です(というか必須)
alias c="powered_cd"
また,もともとは
- [ターミナルのディレクトリ移動を高速化する]
(http://qiita.com/b4b4r07/items/2cf90da00a4c2c7b7e60#%E3%82%AE%E3%83%9F%E3%83%83%E3%82%AF)
こちらの記事に着想を得たものです。リンク先のenhancd
の方がこの記事のものより高機能です。ですが、zshユーザーなら誰でも使っているであろうauto_cd
にログ追加が反応しなかったり、 1 このコマンドを作りました。cd -
を打つのは少し面倒(もちろんpowered_cd
の方が打つのはめんどくさいですがエイリアスでなんとかできる)なので
-
enhancdも`alias c="__enhancd::cd -"でコマンドのタイプ数削減は可能です。すみません ↩