coc.nvimのextensionインストール時、「Expect absolute file path for dest option」エラーが出るときの対処法

目次

結論

g:coc_data_homeextensions ディレクトリへの絶対パスを入れる。

let g:coc_data_home = '/home/***/.config/coc/extensions'

前提

  • Neovim
  • Node.js
  • Yarn

が既にインストールされているとする。

coc.nvim と extension のインストール

dein.vim を使っているので、dein.toml からインストールする。

# dein.toml
[[plugins]]
repo = 'neoclide/coc.nvim'
rev = 'release'

次に、extension(ここでは coc-rust-analyzer)をインストールする。

# dein.toml
[[plugins]]
repo = 'neoclide/coc.nvim'
rev = 'release'
hook_add = '''
let g:coc_global_extensions = ['coc-rust-analyzer']
'''

しかし、これで nvim を起動してインストールしようとすると、「Expect absolute file path for dest option.」というエラーが出る。これを解決するには、g:coc_data_homeextensions ディレクトリへの絶対パスを入れれば良い。

# dein.toml
[[plugins]]
repo = 'neoclide/coc.nvim'
rev = 'release'
hook_add = '''
let g:coc_data_home = '/home/***/.config/coc/extensions'
let g:coc_global_extensions = ['coc-rust-analyzer']
'''

試したこと

この「Expect absolute file path for dest option.」というエラーメッセージを検索しても何も分からない。

GitHub で coc.nvim のソースを読んでみる。

よく分からないので変数の値をログに出力しながら調べたい。

# dein.toml
[[plugins]]
repo = 'neoclide/coc.nvim'
hook_add = '''
let g:coc_global_extensions = ['coc-rust-analyzer']
'''

これで release 版ではない coc.nvim がインストールされる。これにより、ソース(.ts ファイル)をいじることができる(release 版には元の.ts ファイルは含まれず、コンパイルされた .js ファイルのみ入っている)。

coc.nvim を入れたディレクトリに移動する(私の場合、~/.config/nvim/repos/github.com/neoclide/coc.nvim)。

src 内の .ts ファイルをいじる(主に src/model/download.tssrc/extension/installer.ts)。 logger.info() などでログを出力できる。

$ yarn
$ yarn build

nvim を起動して :CocInstall coc-rust-analyzer で extension のインストールを実行。:CocOpenLog または :CocInfo でそのログを見ることができる。

どうやら、extension のダウンロード・インストール先ディレクトリのパスが ~/.config/coc/extensions となっており、これが絶対パスでなければならないらしい。

ここで、ドキュメントのcoc-extensionsの項、あるいは :help coc-extensions を見ると、次のように書かれている。

Extensions are loaded from "extensions" folder inside |coc#util#get_data_home()| and folders in ‘runtimepath’ when detected.

To customize extension folder, configure |g:coc_data_home|.

そのため、g:coc_data_homeextensions ディレクトリへの絶対パスを入れれば良い。

まとめ

最初からドキュメントをよく読みましょう。

fiore
fiore

自称C++er。

関連項目