回答:
私の知る限り、GUI vim(gvim)はグラフィカルXサーバーを使用するため、vimにはこの機能があります。非GUI Vimも--servername
引数を使用できることを知っていますが、これはX11が実行されているときにのみアクセスできます。一方、neovimにはグラフィカルなサポートがありません。そのため、--servername
コンソールプログラムがその目的のためだけにX11サーバーにアクセスするのは奇妙だと思うので、オプションが機能するとは思いません(オプションが別の方法で完全に書き換えられない限り)。
Neovimリモートは、neovimプロセスを制御するためのpythonスクリプトです。vimスタイルの--servernameおよび--remoteオプションがあります。これは、複数端末の作業環境で現在使用しているものです。
前述のように、Neovimではすべてのクライアントサーバー機能が削除されました。これは、X11共有メモリを使用し、NeovimがX11サポートを削除したためです。
ただし、:help --servername
Neovimで使用すると、serverstart()
関数のドキュメントになります。
serverstart([{address}]) serverstart()
Opens a named pipe or TCP socket at {address} for clients to
connect to and returns {address}. If no address is given, it
is equivalent to:
:call serverstart(tempname())
$NVIM_LISTEN_ADDRESS is set to {address} if not already set.
--servername
The Vim command-line option --servername can be imitated:
nvim --cmd "let g:server_addr = serverstart('foo')"
これにより、ソケットが作成され/tmp/
ます。:echo v:servername
パスを参照してください。より決定的なアドレスを使用する方がおそらく便利です(たとえばserverstart('/tmp/nvim-remote')
、Vimのように番号が--serverstart
既に存在する場合は番号が追加されないため、これを関数でラップすることをお勧めしますが)。
RPC APIを使用してコマンドを送信できます。私が知る限り、Neovim(meh)だけでこれにコマンドを送信する方法はありません。APIクライアントのいずれかをインストールする必要があります。たとえば、参照Python APIクライアント(Neovimリモートが使用するものでもあります):
import neovim
nvim = neovim.attach('socket', path='/tmp/nvim-remote')
try:
nvim.command(':e foo')
finally:
nvim.quit()
おそらくecho ... >> /tmp/nvim-remove
シェルコマンドで同じバイトを送信できますが、RPC APIは多少重要な非テキストプロトコル( "MessagePack RPC")を使用し、どのバイトを送信するかを正確に判断することは、この投稿では少し手間がかかりました。 -)
:help rpc
NeovimのRPC APIの詳細については、をご覧ください。
NB :help remote.txt
および他の多くのヘルプ項目(などhelp server2client()
)がNeovimにまだ存在しますが、そのいずれも機能しません。この機能を削除した人はだれでもかなりずさんな仕事をしたようです。
:terminal
。この情報を考えると、驚くほど簡単でした。
:help x11-clientserver
それを確認しているようです:「クライアントとサーバー間の通信はXサーバーを通過します。[..] X11ディスプレイへのアクセスを備えた非GUI Vim(| xterm-clipboard |が有効な場合)サーバー名が明示的に...」与えられた