マクロ生物学徒の備忘録

某国立大で進化生態学を学ぶポンコツ研究者の備忘録

pecoでcdを快適にした|bashでもpeco

はじめに

pecoってなに?という方はこのへん↓をご参考に。

GitHub - peco/peco: Simplistic interactive filtering tool

pecoの基礎の基礎 - Qiita

え、まだpecoを使ってないの??? - Qiita

ダウンロードは一番上の公式サイトから。

 

cdで遠くのディレクトリに移動するとき、いくらtabキーがあるとはいえ、長ったらしいパスを打ち込んで目的のディレクトリに一気に移動している人は少ないだろう。

かといって、一つ一つcd→ls→cdみたいに進んでいくのもめんどくさい。

そこで、もっとGUIに近い感覚でディレクトリ移動したい!!

という方にオススメのコマンドをpecoで作ってみた。

 

仕様

まずは↓を見ていただきたい。「sd」というのがそのコマンドだ。

f:id:bio_eco_evo:20170430033226g:plain

基本動作は、

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の選択肢の中に組み込んだため、検索に引っかかってしまうという欠点がある。

私は基本的に矢印で移動しているので、あまり問題にならないが、ガンガン検索して移動していく人には邪魔になるかもしれない。

あと場合によっては、ディレクトリ移動後、一覧が表示されるまで少しラグが生じることがある。

もっと改善できそうなら、ご報告ください。