普段、ターミナル操作をメインで行う人であれば、ディレクトリ移動や移動の履歴などを効率よくできないか?など考えたり、自作スクリプトなどでカスタマイズしている人もいると思います。今回は、fish shellを使っていてディレクトリ移動管理が便利だと感じたので紹介したいと思います。bashのディレクトリ移動履歴管理などと比較しながらまとめてみようと思います。

bashでのディレクトリ移動の効率化について

cdでディレクトリを移動します。このとき、移動後に直前のディレクトリへ戻るには、cd -で戻ることができます。cdコマンドで移動する場合は、基本的に履歴が管理されません。代わりのコマンドとしては、以下のコマンドを利用します。

  1. pushd
  2. popd
  3. dirs

pushd

cdコマンドと同じく引数で指定したディレクトリに移動することが出来るコマンドです。この時、移動前のカレントディレクトリをスタックに保存して指定されたディレクトリに移動するというのがpushdの特徴です。

popd

pushdコマンドによってスタックに保存された最新ディレクトリに移動するのがpopdコマンドです。スタックは、後入れ先出しなので、最後に移動したものを取り出して移動する。

dirs

pushdコマンドによって保存されているスタック情報を確認出来るのがdirsコマンドです。スタックのクリアなどもこのコマンドで実行することが出来ます。

bashを利用して移動履歴を残したい場合には、cdではなくpushed を使う必要がありました。また、スタック上に積んで、取り出すという操作を行っているので、繰り返し利用することが出来ない状況にありました。

fishの場合を見てみましょう。

fishシェルでも同様のコマンドがあります。

dirh

dirhコマンドは、履歴を表示するコマンドです。

prevd

prevdコマンドは、ディレクトリ履歴を過去方向に移動します。

nextd

nextdコマンドは、prevdコマンドと反対で、ディレクトリ履歴を未来方向に移動します。

実際に使ってみると

# 1.ディレクトリ移動履歴の確認
$ dirh
 2) /Users/kawashima
 1) /Users/kawashima/test1
    /Users/kawashima/test2

# 2. 2番の移動履歴に移動する。
$ prevd 2
$ pwd
/Users/kawashima

# ディレクトリ移動履歴の確認
❯ dirh
    /Users/kawashima
 1) /Users/kawashima/test2
 2) /Users/kawashima/test1

前にも移動してみましょう。

 # ディレクトリ移動履歴の2つ先へ移動する。
 $ nextd 2
 $ dirh
  2) /Users/kawashima 
  1) /Users/kawashima/test1
 /Users/kawashima/test2 

良く移動するディレクトリは、頻繁に移動することが多いので、移動履歴が視覚的に把握できると作業効率はあがりますね。

おわりに

触ってみるとかなり便利だなという印象を持ちました。ディレクトリ移動なんかは何気なく利用するコマンドですので、このように効率的に利用できるのは嬉しいですね。