neovimプラグインをGolangで書いた話
Noahです
そもそもなぜGolang?
Pythonとかもっといいのあるんじゃないの?とか思うかもしれませんが、Pythonで書く場合は実行時にPython3の処理系が必要で、それを導入するのが最初すごくだるかった経験があり、
Golangならバイナリを渡すだけで(vimscriptを別途用意する必要があるが)さくっとプラグイン導入できちゃう(簡単!
さらに、個人的に静的型付け言語で書きたかったのもあります。
何作ったのか
gistの簡易なクライアントを作りました
gist上のファイルをLoad、編集してUpdate、さらに、単一ファイルのUploadも可能にしてあります
このプラグインのために別途、
以前作ったgilbertにGistにアクセスしてやる系のメソッドをまとめた。
開発に使ったライブラリ
neovim/go-client と言うものがあります
これは、neovimとmsgpackで通信するためのライブラリです
開発中に思ったこと
dein.vimで導入する場合にはMakefileを作って、
call dein#add('NoahOrberg/gilbert.nvim', {'build', 'make'})
とすると、実行ファイルも生成してパス上に置くようにするなどすれば全自動でできるけど、ベンダリングがこの場合確かできなかったので注意が必要。
さらに、Golang側で スライスのRangeOutでパニックしても、nvim側で知る術はないため要注意です。chがcloseとかしてると結構気づく(反応がなかったりすると、 Exコマンドの:echo
で通過しているかデバッグしている際に気づくことが多い)
デバッグの際に、いつものクセでpp.Println("1")
などのように標準出力に吐こうとすると、msgpackのchがcloseしたりしたので要注意です(そりゃそうなんだけど、これでかなり時間溶かした)。
後日談
実はこれ、思い立ったが吉日で、うちの大学の学祭中に部屋にこもりっきりでガンガン書いて、
学祭が終わる頃の花火の打ち上げが行われる際には、ある程度の形にはなってました。
あと、個人的にはゲストの大橋彩香さんに会えなかったのがすごく残念です。
今度バンドリのライブ、チケット取れたら行きます。
しばらくはnvimのプラグイン作成であそべそうです。