hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

asyncomplete-tabnine.vim を neovim に対応してみた

概要

tabnineはAIによる入力補完をサポートしてくれるツールです。
vimでも利用できるのですが、デフォルトで使うと同期処理されてレスポンスが遅く使い勝手が悪いです。
非同期用としてYouCompleteMeやCoC、Deopleteが対象となっていますが、私は普段asyncomplete.vimで補完をしているため対象になってませんでした。
asyncomplete-tabnine.vim とうプラグインを作ってくださった方がおり、インストールしてみたのですが、NeoVimではjob_start関数がないとエラーになっていました。
そこで自分用にneovimで動作させてみました。

リポジトリ

github.com

インストールする場合は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を見かけては使いたかったけど仕様が無い気持ちでいました。
これで少しは便利に使えそうです。

ただ、以下のように

と両者の違いが吸収されていくのか少し期待していたのですが、
Shougoさんから

とあったので
ますます乖離していきそうです。
もともとvimからneovimに完全に乗り換えていたのはvimの動作がもっさりしていたのがきっかけですが、
neovimは独自のエディタとして進んでいきそうです。

最近のVimのバージョンでは新しい機能も増えて速度も随分と改善されているように感じます。
neovimの開発がvimを踏襲したものになってはいないのでこのままneovimを使い続けるべきかとても心動かされる内容となりました。
しばらくは併用して考えるかもしれないです。

参考にした記事

scrapbox.io

Nvim documentation: job_control

Nvim documentation: channel

nanasi.jp

thinca.hatenablog.com