neovimの新しいpluginアーキテクチャはmsgpack-RPCでpluginと通信します。
この通信は相互なのでneovim自体がmsgpack-RPCの機能を備えています。
関係する関数は以下の4つ:
- rpcnotify
- rpcstart
- rpcrequest
- rpcstop
今回はrpcstart,rpcrequestについて見ていく。
rpcstart({prog}, [, {argv}])
はプロセスを起動してその標準入出力経由でmsgpack-RPCの通信を実行します。
通常msgpack-RPCのサーバーはアドレスとポートを指定する事が多いと思いますが、neovimはプロセスとの通信しかサポートして無いように見えます。
ですがnetcatを使用してTCPを標準入出力に変換してしまえば解決です!
試してみましょう。
まずneovimでlocalhostの6666をlistenします:
NVIM_LISTEN_ADDRESS=127.0.0.1:6666 nvim
(neovimは標準ではUNIXドメインソケットつかいます)
これを見るために別のneovimを起動して
let c = rpcstart('nc', ['localhost', 6666])
let res = c.call("vim_get_api_info()")
とするとアクセスできます!やったね!!