前提条件
- 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
に記述すればよい。
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以外の選択的インターフェイスを実現する方法でも同様のことが実現できる。