pecoでcdを快適にした|bashでもpeco
はじめに
pecoってなに?という方はこのへん↓をご参考に。
GitHub - peco/peco: Simplistic interactive filtering tool
ダウンロードは一番上の公式サイトから。
cdで遠くのディレクトリに移動するとき、いくらtabキーがあるとはいえ、長ったらしいパスを打ち込んで目的のディレクトリに一気に移動している人は少ないだろう。
かといって、一つ一つcd→ls→cdみたいに進んでいくのもめんどくさい。
という方にオススメのコマンドをpecoで作ってみた。
仕様
まずは↓を見ていただきたい。「sd」というのがそのコマンドだ。
基本動作は、
pecoで次々とディレクトリ選択して、目的のディレクトリまで一気に移動する
といった感じになる。
上のgifアニメでは、矢印キーでポチポチ選択しているが、もちろん検索して移動していくこともできる。
一番上の項目には常に今のフルパスを表示されるようになっており、それを選べばプロセスが完了する。
上から二番目の「../」を選択すると直上のディレクトリにも移動できる。
さらにオプションとして、①隠しディレクトリを表示する機能、②今いるディレクトリの中のファイルを表示する機能、③いつでもホームディレクトリに移動できる機能を追加した。詳しくは後述。
スクリプト
### .bashrcに記述 ### function peco-cd { local sw="1" while [ "$sw" != "0" ] do if [ "$sw" = "1" ];then local list=$(echo -e "---$PWD\n../\n$( ls -F | grep / )\n---Show hidden directory\n---Show files, $(echo $(ls -F | grep -v / ))\n---HOME DIRECTORY") elif [ "$sw" = "2" ];then local list=$(echo -e "---$PWD\n$( ls -a -F | grep / | sed 1d )\n---Hide hidden directory\n---Show files, $(echo $(ls -F | grep -v / ))\n---HOME DIRECTORY") else local list=$(echo -e "---BACK\n$( ls -F | grep -v / )") fi local slct=$(echo -e "$list" | peco ) if [ "$slct" = "---$PWD" ];then local sw="0" elif [ "$slct" = "---Hide hidden directory" ];then local sw="1" elif [ "$slct" = "---Show hidden directory" ];then local sw="2" elif [ "$slct" = "---Show files, $(echo $(ls -F | grep -v / ))" ];then local sw=$(($sw+2)) elif [ "$slct" = "---HOME DIRECTORY" ];then cd "$HOME" elif [[ "$slct" =~ / ]];then cd "$slct" elif [ "$slct" = "" ];then : else local sw=$(($sw-2)) fi done } alias sd='peco-cd'
以上を.bashrcとかに書き込んで、
source .bashrc
で読み込めば使用できるようになり、
sd
で実行される。Select Directoryの略のつもり。
ショートカットが気に食わない方は適宜改変してください。
オプション
①隠しディレクトリを表示する機能
下から3番目の「---Show hidden directory」を選択することで、隠しディレクトリを表示するモードに移行する。
デフォルトでは隠しディレクトリは表示されないようになっているので、隠しディレクトリに移動したいときはこの項目を選択する必要がある。
隠しディレクトリが邪魔になったら「---Hide hidden directory」を選択すれば、再び隠してくれる仕様です。
②今いるディレクトリの中のファイルを表示する機能
下から2番目の項目に、今いるディレクトリのファイルを一行で表示するようにした。
さらに、この項目を選択すると、一覧にしてpecoで表示してくれるようになる。
ちなみにファイル一覧を表示しているときは何を選択しても、前の画面に戻るだけである。
③いつでもホームディレクトリに移動できる機能
一番下には「---HOME DIRECTORY」という項目を設けて、どこにいても一気にホームディレクトリに移動できるようにした。
ホームディレクトリ移動後もプロセスは終了しないので、ホーム直下のディレクトリなんかは一回ホームディレクトリを経由すると楽に移動できる。
おわりに
オプションコマンドをpecoの選択肢の中に組み込んだため、検索に引っかかってしまうという欠点がある。
私は基本的に矢印で移動しているので、あまり問題にならないが、ガンガン検索して移動していく人には邪魔になるかもしれない。
あと場合によっては、ディレクトリ移動後、一覧が表示されるまで少しラグが生じることがある。
もっと改善できそうなら、ご報告ください。