pecoからfzfに乗り換える

  • shell

動機

  • 公式で Vim に対応している
    • 「対応している」という言い方が正しいかは分からないが、そもそもが実行ファイルと Vim Plugin のセットみたいな状態で配布されている
  • カスタマイズ項目が多い
    • 自分が思っていたより fuzzy matcher をよく使う人間であるということが分かったので、peco より自由度が高い fzf へ移行していく

作業

やっていくぞ。

fzf のリポジトリを見ると、GitHub Releases で実行ファイルが配布されている。つまり zplug チャンスである。

.zshrc に以下を追記する。

# fzf
zplug "junegunn/fzf", \
  from:gh-r, \
  as:command, \
  rename-to:fzf

シェルを再起動する。

$ which fzf
/home/zoshigayan/.zplug/bin/fzf

入った。zplug すごい。

ということで、早速 ghq 管理下のディレクトリに移動するエイリアスを置き換えてみる。

- alias g='cd $(ghq root)/$(ghq list | peco)'
+ alias g='cd $(ghq root)/$(ghq list | fzf --reverse)'

動いた。fzf すごい。

vim や ripgrep との連携は後でやることになっているので、とりあえず history 検索を実装してみた。

incremental_search_history() {
  selected=`history -E 1 | fzf | cut -b 26-`
  BUFFER=`[ ${#selected} -gt 0 ] && echo $selected || echo $BUFFER`
  CURSOR=${#BUFFER}
  zle redisplay
}
zle -N incremental_search_history
bindkey "^R" incremental_search_history

これで ctrl + r で history に対して fzf によるファジー検索をして、選択した履歴をバッファに呼び出す…というのができるようになった。便利!