fzfで便利にgrepする
筆者はIntellJなどのJetBrains製品の検索が好きで,特にFind in Pathという検索ではプレビューが表示されて,編集もできて非常に便利です.
そんな中,VSCodeへの移行も考えたりしていたのですが,どうもVSCodeの検索機能が個人的には好きになれません.VSCodeではプレビューしたいだけなのにファイルがどんどんと開かれていったり,検索結果とプレビューがあまり一体化していないような気がします(伝われ).
巨大なコードベースになればなるほど検索機能は重要になるので,VSCodeの拡張機能とかは魅力的だけど... という状態でした.
VSCodeの拡張機能でも作ろうかと思ったのですが,ウィンドウを作るみたいなAPIが見当たらず難しそうな印象でした.
そこで色々と調べていたところfzfに出会いました!
結論から言うと,fzfの作者の方が作られたvimコマンドで解決しました.
今回は,「検索結果をフィルタリング」するのではなく,「ワードで検索して選択する」という使い方をしたいので,リンク先のfunction! RipgrepFzf(query, fullscreen)
を vimrc
に設定します.この関数は
With --phony option, fzf will no longer perform search. The query string you type on fzf prompt is only used for restarting ripgrep process.
とあるようにfzfをripgrepプロセスのリスタートだけに使います.
具体的な処理としては,入力されるたびにripgrepを実行して,検索結果をプレビュー付きで表示して,選択するとvimを開くということをやってくれます.
試してみたところこんな感じでまさに求めていた検索でした!
ただ,気持ち早めに入力したり削除したりするとうまく検索されないことが多々ありました...
これは完全に勘ですが排他制御がうまく機能していないのかもしれません.このあたりちゃんとソースコードを追っていこうと思います.