fzf.vimとripgrepとは
fzfとはGo言語で開発されたコマンドラインで曖昧検索をするためのツールの事です。導入することでファイルやコマンド履歴に曖昧検索をかけて素早く参照することが可能になります。またGo言語で開発されていることは移植性が高くパフォーマンスも高いということになります。
fzfを利用したfzf.vimというVimプラグインがあり、これを利用するとVim内のファイル検索が非常に使いやすくなるので今回導入して使ってみたいと思います。
次にregrepは指定のディレクトリ内のファイルを再帰的に検索するツールです。grepコマンドをリッチに使い易くしたものというイメージです。fzf.vimプラグインと組み合わせることでVimgrepをより使い易くなりますので、fzf.vimプラグインと一緒にインストールしてみます。
※動作環境はmac OSでVimです。
fzf.vimでファイルを曖昧検索
ここからVimでfzf.vimプラグインをインストールして下さい。Vimプラグインの管理方法はこちらをご確認下さい。
インストールが完了しましたらVimのコマンドラインから:FZF
か:Files
と入力するとfzfインタフェースが起動してプロンプトが出力されます。そこで文字列を入力するとPATHやファイル名を補完してカレントディレクトリのファイルを曖昧検索します。<Ctrl + j>
と<Ctrl + k>
で開きたいファイルにカーソルを合わせてから<Enter>
を押すとファイルを開けます。
他にもたくさんコマンドが用意されていますが、まだ把握出来ていないので知見が溜まる度に更新して参ります。
ripgrepで全文を曖昧検索
次にfzf.vimの:Rg
で曖昧検索を使えるようにするためにrigrepをインストールします。こちらはVimプラグインではなくrigrepパッケージをbrewでインストールして下さい。
$ brew install rigrep
インストールが完了したらVimのコマンドラインで:Rg 【pattern】
と入力します。先程同様にfzfインタフェースが起動してカレントディレクトリ内のファイル全文を曖昧検索してくれる筈です。右側にはプレビュー画面が表示されます。fzfインタフェースで文字列を入力すると更にフィルタを掛ける事も可能です。
以上がfzf.vimとripgrepの使い方でした。
fzf.vimのその他のコマンド
ウィンドウ移動を高速化
:Windows
と入力すると今Vimで開いているウィンドウの一覧に対してfzfで検索が可能です。一度にたくさんのタブやウィンドウを開く場合にとても便利です。
キーマッピング
fzfもrigrepも一日に数十回使用するコマンドです。であるならばショートカットで呼び出せるように.vimrcにキーマッピングを登録しておくべきです。他の機能と衝突せず連想しやすいニーモックさを意識して下のような設定にしました。
:nnoremap <Leader>f :FZF<CR>
:nnoremap <Leader>r :Rg
:nnoremap <Leader>b :Buffers<CR>
:nnoremap <Leader>w :Windows<CR>
:nnoremap <Leader>h :History<CR>
※<Leader>
とはバックスラッシュを入力するキーの事です。
お好きなキーマッピングを登録して下さい。
※ファイルを見つけた後展開するキーマッピングの設定は下記の通りです。
let g:fzf_action = {
\ 'ctrl-t': 'tab split',
\ 'ctrl-s': 'split',
\ 'ctrl-v': 'vsplit' }
終わりに
fzfに関しては前々から便利だという噂を聞いておりましたが、曖昧検索自体をVimに導入したいと思うようになったきっかけは知り合いのVscodeの操作画面を見て羨ましく思ったからです。必要は発明の母と言いますが現状の環境に満足すること無く、あの機能欲しいこの機能も欲しいという欲深さがエンジニアには必要だなと思いました。
ちなみに今回はVimプラグインのfzf.vimに関してのみまとめていますが、ターミナルにインストールするfzf自体も非常に便利です。