Coc.nvimの拡張を環境変数経由でNeoVim起動時に自動インストールされるようにしてみた

環境移行時に、NeoVim拡張のCoc.nvimが独自に持っている拡張をインストールしなおす方法を探した結果、若干手作業が必要だったもののなんとかなったという記録です。
2021.10.28

PCの交換に伴うセットアップ作業を進める際に、前環境の設定ファイルをAirDrop経由にて取り出す、という手続きが最近の常套手段となりつつあります。他の物理デバイスを介さないのはとても気楽です。

ただ、割と大変なケースがありました。NeoVimの拡張であるcoc.nvimです。手元の環境ではNeoVim自体はdein.tomlを引っ張れば即完了で、coc.nvim本体もNeoVim初回起動時にインストールされます。が、coc.nvimの独自拡張は話が別です。

coc.nvimの拡張を大量導入していたためにインストールコマンドを打つのが億劫でしたが、一応の対応手段があったため紹介含めて書いてみることにします。

Cocインストール済み拡張の設定

coc.nvimはインストール済みの拡張を一覧として表示可能です。

:CocList extensions

各拡張の機能オンオフに使える設定です。これらをなんとかリストとしてアウトプットできないか試みましたが無理でした。が、CocList を打っていて気が付きました。拡張のインストール先パスが同じであると。

拡張名さえ一通り取得してしまえば :CocInstall にてまとめてつっこめますが、今回は g:coc_global_extensions を使います。

g:coc_global_extensions経由でのインストール

coc起動時にこの変数へ指定されていた拡張のうち未導入なものをまとめてインストールしてくれます。

今回はlsで一覧を取り、それをcoc起動時に導入指定とする g:coc_global_extensions に突っ込みます。

% ls ~/.config/coc/extensions/node_modules/ | pbcopy
coc-actions
coc-cspell-dicts
coc-deno
coc-diagnostic
coc-dictionary
coc-eslint
coc-floaterm
coc-git
coc-highlight
coc-java
coc-jedi
coc-json
coc-lists
coc-markdownlint
coc-metals
coc-pairs
coc-prettier
coc-snippets
coc-spell-checker
coc-tslint-plugin
coc-tsserver
coc-ultisnips
coc-yaml

init.vimに指定します。

let g:coc_global_extensions = [
      \'coc-actions',
      \'coc-cspell-dicts', 
      \'coc-deno', 
      \'coc-diagnostic', 
      \'coc-dictionary', 
      \'coc-eslint', 
      \'coc-floaterm', 
      \'coc-git', 
      \'coc-highlight',
      \'coc-java', 
      \'coc-jedi', 
      \'coc-json', 
      \'coc-lists', 
      \'coc-markdownlint', 
      \'coc-metals', 
      \'coc-pairs', 
      \'coc-prettier', 
      \'coc-snippets', 
      \'coc-spell-checker', 
      \'coc-tslint-plugin', 
      \'coc-tsserver', 
      \'coc-ultisnips', 
      \'coc-yaml'
\]

あとはNeoVim起動時にcoc起動した場合、これらの拡張が未導入であれば個別インストールされます。

あとがき

coc.nvimの設定は基本coc-settings.jsonのみです。CocInstall で導入した場合は別環境でも個別に同操作が必要となりますが、NeoVimの設定に g:coc_global_extensions として入れておくことで追加操作は不要となります。

cocを使い始めた頃は存在することすら気が付かない環境設定で、環境移行で初めて気がつくような存在です。この記事にて知った場合は今のうちから設定しておくことで後々が楽かもしれません。