はじめに
最近Neovimを使うようになってターミナル上で生活する時間が増えてきまして、CUIの便利ツールをよく探すようになりました。本記事ではターミナル上でのファイル検索を快適にしてくれるfzfというツールについて紹介します。
fzf ひいてはFuzzy Finderとはなんぞや
fzfはFuzzy Finderをもじったものです(だと思ってます)。
リポジトリはこちら
Fuzzy Finderというのは日本語でいうところのあいまい検索とほぼ同義です。例えば、qiita_article_getter.pyという名前のファイルを検索したい時、前方一致的にqiita_article_geと打つと確実にHITしますよね。これが、あいまい検索が有効なサービスの場合、qiitagetterでもHITすることになります。ファイル名を前方一致的に一言一句違わずに入力せずとも、ファイル名の断片的な情報で検索が可能になるということです。
fzfをインストールすると、ターミナル上でのファイル検索時にこうしたあいまい検索が可能になります。
以下のGIFは、labeltestという文字列からLabeledSum.test.tsxというファイルを検索する例です。

fzfで検索した結果をcd・nvimコマンドに渡す
fzfはそれ単体でも強力なコマンドですが、他のコマンドに渡すことでよりその効果を発揮します。
例えばnvim $(fzf)を実行すると、fzfで検索したファイルをNeovimで開くことができます。

自分はこれをnvf()という関数にして.zshrcに記載しています。
nvf() {
local dir
cd
dir=$(fzf)
[ -n "$dir" ] && nvim "$dir"
}
上記のnvfは検索対象をファイルにとしていますが、ディレクトリを検索対象にすることもできます。自分は以下のnvdという関数を別途作って(Claudeに作ってもらって)、同じく.zshrcに記載してます。
nvd() {
local dir
# ホームディレクトリに移動。ホームディレクトリを起点にして検索を開始したいため。
cd
# fdはfindコマンドの代替版。fdで検索した結果をfzfに渡す。
dir=$(fd --type d --hidden --exclude .git | fzf \
--preview 'eza --tree --level=2 --icons --git {} 2>/dev/null || tree -L 2 {} 2>/dev/null || ls -la {}' \
--preview-window=right:60%)
# 見つけたディレクトリまでcdで移動&Neovimで開く
[ -n "$dir" ] && cd "$dir" && nvim .
}
さいごに
今回紹介した例はfzfのほんの一部です。もっと高度でテクニカルな関数を書いて、fzfをより使いこなしていこうと思います。
