coc.nvimのextensionインストール時、「Expect absolute file path for dest option」エラーが出るときの対処法
目次
結論
g:coc_data_home
に extensions
ディレクトリへの絶対パスを入れる。
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_home
に extensions
ディレクトリへの絶対パスを入れれば良い。
# 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.ts
と src/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_home
に extensions
ディレクトリへの絶対パスを入れれば良い。
まとめ
最初からドキュメントをよく読みましょう。