vim-coc (coc-lists)でCtrlP/fzf.vimを代替してみる

最近になってコード補完プラグインとして試し始めた vim-coc だけれど、これ、実は CtrlPfzf.vim のようなファイル一覧のあいまい (fuzzy) 検索もできるらしいね。具体的には、vim-coc 用の拡張機能「coc-lists」を追加インストールすれば良い。検索処理自体は ripgrep を使うようなので、機能面でも速度面でも十分なのではないかと期待される。これまで使っていた fzf.vim + fzf + ripgrep のセットアップを代替できるか試すべく、導入してみる。

(2019年12月28日追記。CtrlP や fzf.vim では検索したファイル一覧での Ctrl+X または Ctrl+V で、水平または縦の画面分割でそのファイルを開く機能があるのだけれど、coc-lists では同等機能が無いようで、この一点だけで fzf.vim + fzf + ripgrep の構成に戻すことにした。)

前提環境

  • VIM 8.0 以降、または Neovim 0.3.1 以降
  • Node.js 実行環境
    • yarn もインストールしておく必要あり
  • ripgpre (rg) が PATH の通ったディレクトリに配置されていること

vim-coc は TypeScript で書かれているため、利用にあたって Node.js が必要になる。また vim-coc 用の各種拡張機能をビルドするために yarn を使うため、yarn のインストールも必要(npm install -g yarn でインストールできる)。また coc-lists 自体は、ripgrep による検索処理をフィルタリング・一覧表示するものであるため、rg コマンドが PATH の通ったディレクトリに配置されている必要もある。

セットアップ

  1. vim-coc のインストール
    • vim-coc 自体は基本的に普通の VIM プラグインなのだけれど、 Typescript 製なのでビルド済みファイル群を格納した branch を 指定するか、ダウンロードと同時にビルドする必要がある。
    • vim-plug を使っている場合は以下を .vimrc に追加 (ビルド済みファイル群を使う例)

      Plug 'neoclide/coc.nvim', {'tag': '*', 'branch': 'release'}
      
    • それ以外のプラグインマネージャを使う場合は公式のインストールガイドを参照

  2. coc-lists のインストール

    • vim-coc のインストール後、VIM/Neovim 上で以下コマンドを実行

      :CocInstall coc-lists
      
  3. コマンドを登録

    • ファイル検索は :CocList files で実行可能
    • Ctrl+P でファイル検索を実行する設定例は:

      nnoremap <C-p> :CocList files<CR>
      

上記でセットアップは完了。.gitignore.ignore も認識してくれて、特に問題は無さそうだ。しばらく使い続けてみよう。

余談:その他の vim-coc 拡張は以下の Wiki ページにまとめられている。

github.com