3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

bashでもfzf+fasdで簡単ディレクトリ移動

Last updated at Posted at 2018-03-18

前提条件

  • macOS 10.13.3 High Sierra
  • iTerm2 3.1.5
  • bash 4.4.12
  • fzf 0.17.1
  • fasd 1.0.1

ディレクトリ移動を簡単に

 ターミナルの操作のうち、ディレクトリ移動の操作は思いの外多い。以下のようなコマンドを日常的にたたいている。

> cd <移動したいディレクトリ>

 このコマンドはシェルの補完機能により比較的簡単に操作できるが、正確に入力する必要がある。複数の独立したレポジトリの移動のような操作が加わる場合以外と労力がかかる。
 補完に強いシェルに乗り換えるという解決作もあるが、移動に特化したコマンドを活用する方法もある。

autojump

 autojump というユーティリティを導入すると、一度移動したディレクトリであれば、構成する文字列の一部を入力するだけで簡単に移動できる。
 jというエイリアスでだいたい正確に移動できる。

> j <移動したいディレクトリを構成する一部の文字列>

autojump:https://github.com/wting/autojump

fasd

 autojumpも良いが、より高速に補完も優れるfasdというユーティリティーを見つけた。こちらは補完もスムーズで且つ見やすい。autojumpと同じように、zというエイリアスで移動できる。

> z <移動したいディレクトリを構成する一部の文字列>

fasd:https://github.com/clvv/fasd

fzfでfasdを更に快適に

 このzコマンドとfzfを組み合わせると快適なことこの上ない。
 fzfとは選択的インターフェイスを実現する(easy finder)と呼ばれるジャンルのユーティリティーである。
 調べたところ、zshでのサンプルを見つけたが、どうもbashで同様のことをしているサンプルは見つからなかった。
 以下のように.bashrcに記述すればよい。

.bashrc
unalias z
z() {
  if [[ -z "$*" ]]; then
    cd "$(fasd_cd -d | fzf -1 -0 --no-sort --tac +m | sed 's/^[0-9,.]* *//')"
  else
    cd "$(fasd_cd -d | fzf --query="$*" -1 -0 --no-sort --tac +m | sed 's/^[0-9,.]* *//')"
  fi
}

 これで、bashでも煩わしいディレクトリ移動から開放される。
 fasd単体と同じようにzコマンドで利用できる。

補足

 fzfの導入が前提となっている。
 fzf以外の選択的インターフェイスを実現する方法でも同様のことが実現できる。

fzf:https://github.com/junegunn/fzf

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?