最小限なcoc.nvim導入手順

職場で coc.nvim のセットアップが面倒という話が出ていたので、本日時点で使えるミニマルな設定について書いておく。

動作確認環境

  • coc.nvim 0.0.76-857c221c55
  • Neovim 0.4.3
  • Node.JS v12.16.1
  • coc-python 1.2.9
  • coc-tsserver 1.4.11
  • coc-json 1.2.5

最小限な設定手順

  1. Node.js をインストールする
    • coc.nvim 自体の動作に必要なため
    • こだわり無ければオフィシャルの手順で普通にインストールすれば良い
  2. coc.nvim をインストールする
    • vim-plug ユーザーなら以下の設定を init.vim (.vimrc) に追加
      • Plug 'neoclide/coc.nvim', {'branch': 'release'}
  3. coc.nvim のステータスメッセージを statusline に表示させる
    • 必須ではないけれど、これを入れておかないと coc.nvim が何をやっているのか分からないため、 これだけは最初から入れておいた方が良いと思う
    • 設定例(オフィシャル README から引用):
      set statusline^=%{coc#status()} (現在のものの先頭に追加)
    • vim-airline や lightline.vim などのプラグインを使っている場合は :h coc-status を参照
  4. 使いたい言語用の coc extension をインストールする
    • たとえば Python ならば :CocInstall coc-python、TypeScript (JavaScript) ならば :CocInstall coc-tsserver
    • 利用可能な coc extension の一覧は Wiki にまとめられているので、そちらを確認されたい github.com
  5. coc extension ごとの設定を(必要に応じて)行う
    • 後述

オフィシャルサイトには設定例がドカンと掲載されているので「何か設定をしておかないと使えないのでは」と感じてしまうかもしれないけれど、基本的には何も設定しなくとも . を打ったタイミングで補完候補が自動的に表示されるようになっている(もちろん競合するプラグインもあるから、素の Neovim / VIM であれば、の話ではある)。ただし、ステータス表示ぐらいは出しておかないとトラブルシュートすらツライので、そこは「最低限」に含めてみた。

coc extension ごとの追加セットアップ

はじめに

たとえば文法チェック (lint) やコード補完といった高度な機能は別 OSS で実現されていることが多い(たいてい、その言語自体で実装されている)。それらの OSS と coc.nvim との「橋渡し」として動作する coc extension を使う場合、当該 OSS の用意も必要になる。このあたりは、それぞれの coc extension のオフィシャルサイトで確認しておくべきだろう。

以下、普段から使っている Python と TypeScript 用の coc extension についてだけ、セットアップ関連情報を簡単に書いておく。

coc-python

Python 用の coc extension である coc-python:CocInstall coc-python でインストールできる。

文法チェック、コード自動整形については、別途インストールしてあるコマンドラインツールを使わせるようセットアップする(flake8black など)。プロジェクト用の仮想環境を作っていると仮定すると、まずそこにツールを pip install しておき、その仮想環境を activate した状態で Neovim / VIM を起動すれば coc-python が自動的にそれらを認識して使ってくれる。コード補完には標準で Microsoft Language Server for Python (MPLS) が使われるのだけれど、これは文法チェッカー等と異なり coc-python が自動的にダウンロードしてくれる。ただし、このとき環境変数 http_proxy は無視されるため、プロキシー設定が必要ならば coc-settings.json (後述)の http.proxy プロパティを設定しておくこと。なおコード補完には jedi を使うよう設定することもできるし、文法チェックやコード整形も色々な選択肢がある。ある程度使い続けるなら、一度 coc-python のオプション一覧は確認しておいた方が良いだろう。

蛇足:本日 2020-03-14 時点での MPLS v.s. Jedi の個人的感想としては、補完内容で MPLS、動作速度で Jedi に軍配が上がる印象。MPLS を使う場合、補完できるようになるまで少し待たされるのが気になる(ファイルを開いてから少し待つとバックグラウンドで分析が走り、その完了後に補完候補が追加される)。元祖である VSCode 用の Python 拡張では、そんなに遅くないと思うので、そのうち改善されるかもしれないけれども。

coc-tsserver

TypeScript / JavaScript 用の coc extension である coc-tsserver:CocInstall coc-tsserver でインストールできる。

コード補完、文法チェック、コード自動整形、いずれについても機能が coc-tsserver 自体に組み込まれているようで、特に追加で OSS をインストールせずとも使えるようになっている。

設定ファイル coc-settings.json について

coc.nvim の設定ファイル coc-settings.json については、個々のプロジェクトに固有の置き場と、プロジェクト間共通(=ユーザーに固有)の置き場があり、両者をマージした設定内容が採用される。前者については :CocLocalConfig を、後者については :CocConfig を実行すれば、Neovim / VIM で直接開くことができる。

このファイルを編集したければ、JSON 用の coc extension である coc-json をインストールしておくと良い(つまり :CocInstall coc-json)。コード補完が働いて、どのようなプロパティがあり、どのような意味なのか Neovim / VIM 上で確認でき、便利だ。

以上。