cdの履歴を保存してpecoとかfzfとか使ってディレクトリ移動する
こんな感じ
何をしているか
-
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"
また,もともとは
こちらの記事にフィーチャーされたものです。リンク先のenhancd
の方がこの記事のものより高機能です。ですが、zshユーザーなら誰でも使っているであろうauto_cd
にログ追加が反応しなかったり、 1 このコマンドを作りました。cd -
を打つのは少し面倒(もちろんpowered_cd
の方が打つのはめんどくさいですがエイリアスでなんとかできる)なので
-
enhancdも`alias c="__enhancd::cd -"でコマンドのタイプ数削減は可能です ↩
Author And Source
この問題について(cdの履歴を保存してpecoとかfzfとか使ってディレクトリ移動する), 我々は、より多くの情報をここで見つけました https://qiita.com/arks22/items/8515a7f4eab37cfbfb17著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .