neovimで--servernameと--remoteを使用するにはどうすればよいですか?


15

vimの中で私が行うことができますvim --servername fooし、vim --servername foo --remote-silent bar.txt(tmuxのか、何を経由して)いくつかのターミナルウィンドウからのvimの1つのインスタンスで開いているファイルに。NeoVimで同じことがどのように達成されますか?

回答:


8

私の知る限り、GUI vim(gvim)はグラフィカルXサーバーを使用するため、vimにはこの機能があります。非GUI Vimも--servername引数を使用できることを知っていますが、これはX11が実行されているときにのみアクセスできます。一方、neovimにはグラフィカルなサポートがありません。そのため、--servernameコンソールプログラムがその目的のためだけにX11サーバーにアクセスするのは奇妙だと思うので、オプションが機能するとは思いません(オプションが別の方法で完全に書き換えられない限り)。


XのないIPCは単に可能であるだけでなく、非常に一般的であるため(ソケットなど)、最初はこの答えは間違っていると思いました。しかし、:help x11-clientserverそれを確認しているようです:「クライアントとサーバー間の通信はXサーバーを通過します。[..] X11ディスプレイへのアクセスを備えた非GUI Vim(| xterm-clipboard |が有効な場合)サーバー名が明示的に...」与えられた
マーティンTournoij

7

Neovimリモートは、neovimプロセスを制御するためのpythonスクリプトです。vimスタイルの--servernameおよび--remoteオプションがあります。これは、複数端末の作業環境で現在使用しているものです。


このプラグインはWindowsプラットフォームでは機能しないことに注意してください。
-jdhao

4

前述のように、Neovimではすべてのクライアントサーバー機能が削除されました。これは、X11共有メモリを使用し、NeovimがX11サポートを削除したためです。

ただし、:help --servernameNeovimで使用すると、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 rpcNeovimのRPC APIの詳細については、をご覧ください。


NB :help remote.txtおよび他の多くのヘルプ項目(などhelp server2client())がNeovimにまだ存在しますが、そのいずれも機能しません。この機能を削除した人はだれでもかなりずさんな仕事をしたようです。


これは素晴らしい答えです。それにより、で実行するためのneovim-remoteの独自のシンプルなWindows互換バージョンを作成できました:terminal。この情報を考えると、驚くほど簡単でした。
デビッド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.