asyncomplete-tabnine.vim を neovim に対応してみた
概要
tabnineはAIによる入力補完をサポートしてくれるツールです。
vimでも利用できるのですが、デフォルトで使うと同期処理されてレスポンスが遅く使い勝手が悪いです。
非同期用としてYouCompleteMeやCoC、Deopleteが対象となっていますが、私は普段asyncomplete.vimで補完をしているため対象になってませんでした。
asyncomplete-tabnine.vim とうプラグインを作ってくださった方がおり、インストールしてみたのですが、NeoVimではjob_start関数がないとエラーになっていました。
そこで自分用にneovimで動作させてみました。
リポジトリ
インストールする場合はREADMEを確認してください。
変更点
https://github.com/kitagry/asyncomplete-tabnine.vim/compare/master...hotoolong:master
上記の差分が修正点になります。興味のある方は確認してみてください。
vimのjob_startはneovimではjobstart関数(ハイフンがない)で似たように処理をしています。
引数で渡すコールバック関数の引数の数が違っていたりするので、
vimとneovim両者に対応する場合はどちらのコールバック関数も作成する必要がありそうです。冗長な状態ですね。
jobでIOを確立した後にchannelを制御するのも
vimではch_sendrawを使っているのに対してneovimではchansendを使っています。
このあたりもまだ理解が追いついてないのですがhelpを見ながらなんとか動かしてみたという状態です。
まとめ
以前からneovimで動作しないvim pluginを見かけては使いたかったけど仕様が無い気持ちでいました。
これで少しは便利に使えそうです。
ただ、以下のように
neovimとvimでscriptが若干違ってるのはいつか解消されるのかな。vimで動くプラグインがneovimで動かないというのが結構あるな。
— hotoolong (@hotoolong) 2020年9月12日
と両者の違いが吸収されていくのか少し期待していたのですが、
Shougoさんから
解消されないでしょう。逆にどんどん違いが大きくなる方に向かっています。
— 暗黒美無王 dark Vim (@ShougoMatsu) 2020年9月12日
VimはVim9スクリプトに、neovimはLuaに傾倒しているからです
とあったので
ますます乖離していきそうです。
もともとvimからneovimに完全に乗り換えていたのはvimの動作がもっさりしていたのがきっかけですが、
neovimは独自のエディタとして進んでいきそうです。
最近のVimのバージョンでは新しい機能も増えて速度も随分と改善されているように感じます。
neovimの開発がvimを踏襲したものになってはいないのでこのままneovimを使い続けるべきかとても心動かされる内容となりました。
しばらくは併用して考えるかもしれないです。