Coc.nvimを触ってみようアドベントカレンダー 24日目 – coc-extension
Coc.nvimを触ってみよう Advent Calendar 2021 24日目です。
今回は coc-extension
です。
coc-extension について
coc.nvim用拡張を作成する時に用いるスケルトンとなります。沢山拡張を紹介してきましたが、幾つか正常にリリースされていないためか期待通りには動かずお蔵入りした原稿もあります。動かない原因を追える様になるには作れることが一番と思い、とりあえず取っ掛かりを触ってみました。
必要となるのはPOSIX仕様のターミナル環境(bash、zsh、他)と以下の通り。
- git
- Nodejs(>=8.10.0)
- yarn (>=1.22.4)
- Neovim 0.4.4+
- coc.nvim 0.0.78
coc-extension を使ってセットアップする
yarnにてプロジェクトを作ります。今回は適当にcoc-s3にて。
% yarn create coc-extension coc-s3 yarn create v1.22.17 [1/4] ? Resolving packages... [2/4] ? Fetching packages... [3/4] ? Linking dependencies... [4/4] ? Building fresh packages... success Installed "create-coc-extension@0.6.3" with binaries: - create-coc-extension ? Project title: coc-s3 ? Project description: ? Author full name: haoyayoi ? Author email address: st.hao.yayoi@gmail.com ? Initialize a git repository? Yes ? Install node dependencies? Yes installing node dependencies... yarn install v1.22.17 info No lockfile found. [1/5] Validating package.json... [2/5] Resolving packages... [3/5] Fetching packages... [4/5] Linking dependencies... [5/5] Building fresh packages... success Saved lockfile. $ node esbuild.js Done in 25.86s. coc-s3 is created. Now "set runtimepath^=/Users/path/to/coc-s3" in vimrc/init.vim, open vim and you will see "[coc.nvim] coc-s3 works!" in vim messages. ✨ Done in 485.70s.
set runtimepath^=......
をinit.vim
に追加しておきます。
settings.json反映用の実装
:CocConfig
にて適用される設定はpackage.jsonの contributes
以下を編集します。
coc-xxx.enabled
が初期設定として含まれているものの、contributes
以下にあるとしても処理に自動反映されるわけではなく、そこは個別での追加実装が必要です。
まずは enabled
が反映されるようにしてみます。
src/index.ts
を開き、7行目辺りに以下4列を加えてみます。
const config = workspace.getConfiguration('coc-s3'); const isEnable = config.get<boolean>('enabled', true); if (!isEnable) { return; }
workspace
については行頭で coc.nvim からimportされているので利用可能です。
Deployについて
基本はGitHubにパブリッシュするだけです。インストールはinit.vimへ以下のような一文をいれておきます。
call dein#add('haoyayoi/coc-s3', {'tag': '', 'do': 'yarn install --frozen-lockfile'})
完成後に一般公開したいのであればnpmへのDeployを検討しましょう。
あとがき
今回は以下の記事を参考にしてみました。本当に入り口であるため、作り込みたい場合はnodejsの知識や他のcoc拡張の実装を参考にするのもよさそうです。