RubyにハマったのでRubyでNeovimプラグインを書いてみる。 バージョンはruby 3.0.6。
下準備
NeovimのRubyのサポートを追加するため、Neovimライブラリをインストールする。
gem install neovim
checkhelth provider
を実行してRubyサポートが有効になっているか確認する。
この時、インストールディレクトリがPATHにないとエラーが発生するので注意。
ディレクトリ構成
runtimepath上にあるrplugin/ruby/*rb*
を読み込む仕様なので、以下のように構成する。
ディレクトリを作成したあとは任意のプラグインマネージャかruntimepathを編集して読み込ませる。
LSPを使う場合はbundle init
でGemfileを作成する。
.
├── Gemfile
└── rplugin
└── ruby
└── plugin.rb
プラグインを書いてみる
NeovimのAPIをラップしたライブラリがあるのでそれを使う。
基本はDSLを使うのでここを参考に書いていく。書き終わったらUpdateRemotePlugins
を忘れずに。
Rubyエアプなので細かい説明は書かないけども、ざっくりこんな感じになってる。
- Neovim.pluginのスコープ内で使える
plug
オブジェクトでautocmdや実行するコマンドなどの定義をおこなう。 plug
のメソッドで作られるスコープ内で使えるnvim
オブジェクトからNeovimが持つ関数群を呼び出し処理を行う。
それぞれ使えそうなメソッドを上げてみる。
plug
command
Neovimで呼び出せるExコマンドを定義する。~~先頭に:
を付けるとエラーになるので注意。~~文字列にしなければ:を付けても良いらしい。ElixirのAtom的なやつ?
autocmd
autocmdを定義する。イベント名は:h autocmd-events
で参照できる。
function
他のスクリプトから呼び出せる関数を定義する。
nvim
command
NeovimのExコマンドを実行できる。困ったらこれを使えば良さそう。
余談
その他の関数は恐らくNeovim API1の名前を使えば呼び出せるっぽい。 Rubyでプラグイン作った人が記事(英語)を書いているので色々参考になりそう。
Neovim API周りを漁ってたらElixirでNeovimプラグインを書ける代物を見つけてしまったのでこれも触ってみたくなってきた…Gleamで型付けしてパッケージにしてみたい。
Footnotes
-
由来は多分Lua APIの
vim.api
なのでLua APIをいじりながらコードを書くと捗りそう。型は不明なので色々理解ってきたらここにも書き足していきたい。 ↩