fishシェルのディレクトリ移動履歴管理はとても簡単
「bashからfishへ乗り換えました」の第2回になります。 fishシェルを使うと ディレクトリの移動履歴管理がとても簡単になります、という話。
fishシェルではbuild-inコマンドで cd
コマンドを使ったディレクトリ移動履歴を簡単に管理できます。
bashシェルでは
bashシェルでも pushd
コマンド、 popd
コマンド、 dirs
コマンドを使うと、移動したディレクトリの履歴を管理できます。
# サンプル用ディレクトリ(~/tmp、~/tmp2)の作製
$ mkdir tmp
$ mkdir tmp2# ~/tmp に pushd で移動
$ pushd tmp
~/tmp ~# カレントディレクトリの確認
$pwd
/Users/goroyanagi/tmp# ~/tmp2 に pushd で移動
$ pushd ~/tmp2/
~/tmp2 ~/tmp ~# カレントディレクトリの確認
$pwd
/Users/goroyanagi/tmp2# ディレクトリ移動履歴の確認
$ dirs
~/tmp2 ~/tmp ~# ひとつ前のディレクトリに移動
$ popd
~/tmp ~# カレントディレクトリの確認
$ pwd
/Users/goroyanagi/tmp# もうひとつ前のディレクトリに移動
$ popd
~# カレントディレクトリの確認
$ pwd
/Users/goroyanagi
ディレクトリの移動履歴を管理する、という目的は達成出来るのですが、いくつか問題があります。
問題1) cd
コマンドで移動した履歴が記録されない
通常、ディレクトリを移動するのに使うコマンドは cd
コマンドです。しかし、困ったことに cd
コマンドで移動した場合、履歴が記録されません。したがって popd
コマンドで戻ることもできません。 ディレクトリの移動履歴を管理したい場合はpushd
コマンドを使う必要があります。
問題2) 履歴をジャンプできない
先ほどの例で ~
-> tmp
-> tmp2
という順に移動しました。この場合、tmp2
から ~
に popd
コマンドで戻ることはできません。
問題3) 前に進めない
popd
コマンドで移動した後、もとのディレクトリに戻ることはできません。 つまりtmp2
から ~
に popd
コマンドで戻った後、再び tmp2
に戻るには改めて、 pushd
コマンドで移動する必要があります。
さてfishシェルでは
もちろんfishシェルでも同様のコマンドがあります。しかも、もっと便利です。
cd
コマンドで移動した履歴を記録する
# サンプル用ディレクトリ(~/tmp、~/tmp2)の作製
❯ mkdir tmp
❯ mkdir tmp2# ~/tmp に cd で移動
❯ cd tmp# カレントディレクトリの確認
❯ pwd
/Users/goroyanagi/tmp# ~/tmp2 に cd で移動
❯ cd ~/tmp2# カレントディレクトリの確認
❯ pwd
/Users/goroyanagi/tmp2# ディレクトリ移動履歴の確認
❯ dirh
2) /Users/goroyanagi
1) /Users/goroyanagi/tmp
/Users/goroyanagi/tmp2# ひとつ前のディレクトリに移動
❯ prevd# カレントディレクトリの確認
❯ pwd
/Users/goroyanagi/tmp# ひとつ前のディレクトリに移動
❯ prevd# カレントディレクトリの確認
❯ pwd
/Users/goroyanagi
cd
コマンドで移動したディレクトリが記録されており、 prevd
コマンドで戻ることができます。 dirh
コマンドはで移動したディレクトリの履歴が確認できます。
履歴をジャンプする
# ディレクトリ移動履歴の確認
❯ dirh
2) /Users/goroyanagi
1) /Users/goroyanagi/tmp
/Users/goroyanagi/tmp2
移動したディレクトリのリストを表示したときに、行頭に番号が表示されています。 prevd
コマンドの引数にこの番号を指定すると、そのディレクトリに移動できます。つまり履歴をジャンプできます。
# ディレクトリ移動履歴の確認
❯ dirh
2) /Users/goroyanagi
1) /Users/goroyanagi/tmp
/Users/goroyanagi/tmp2# /Users/goroyanagi (2つ前のディレクトリ)に移動
❯ prevd 2# カレントディレクトリの確認
❯ pwd
/Users/goroyanagi# ディレクトリ移動履歴の確認
❯ dirh
/Users/goroyanagi
1) /Users/goroyanagi/tmp2
2) /Users/goroyanagi/tmp
前に進む
nextd
コマンドを使って、 prevd
コマンドで戻ったディレクトリを進むことができます。
# /Users/goroyanagi/tmp (2つ先のディレクトリ)に移動
❯ nextd 2# ディレクトリ移動履歴の確認
❯ dirh
2) /Users/goroyanagi
1) /Users/goroyanagi/tmp
/Users/goroyanagi/tmp2
これで、bashシェルのディレクトリの移動履歴管理で挙げた3つの問題が解消されていることが確認できました。
もっと便利に
fishシェルには高性能なプラグイン管理の仕組み(fisher)があります。fisherを使って以下のプラグインをインストールしてください。
fisherがあれば、以下のコマンドでインストール出来ます。
❯ fisher add jethrokuan/z
インストール後、新たにfishシェルを起動すると z
コマンドが使えるようになります。
新たに起動したfishシェルでディレクトリをいくつか移動したあとに、 z
コマンドを使ってみてください。
❯ mkdir tmp
❯ mkdir tmp2❯ cd tmp❯ cd ../tmp2❯ z [tab]
…royanagi/tmp …royanagi/tmp2
tab
キーを連打すると過去の移動履歴が表示され、移動可能なディレクトリが順にフォーカスされます。 prevd/dirh/nextd
コマンドを利用するよりも簡単に移動できますね。
fishシェルは friendly interactive shellの略です。標準の状態でもbashシェルよりも便利です。
プラグインを入れるともっと便利になりますが、fishシェルの面目躍如ですね。