我如何在neovim中使用--servername和--remote?


15

在vim我可以做的vim --servername foovim --servername foo --remote-silent bar.txt从几个终端窗口(通过TMUX或其他)来打开文件在vim的一个实例。NeoVim如何实现相同的目的?

Answers:


8

据我所知,vim具有此功能,因为GUI vim(gvim)使用图形X服务器。我知道非GUI Vim也可以使用该--servername参数,但只能在X11运行时以及通过对其进行访问。另一方面,neovim没有图形支持。因此,我认为该--servername选项不起作用(除非该选项将以另一种方式完全重写),因为我发现奇怪的是,有一个控制台程序仅出于该目的访问X11服务器。


起初我以为这个答案是错误的,因为不带X的IPC不仅可能,而且非常普遍(例如套接字)。但:help x11-clientserver似乎证实了这一点:“客户端与服务器之间的通信通过X服务器进行。[..]可以访问X11显示屏(| xterm-clipboard |启用)的非GUI Vim也可以充当命令服务器,如果明确指定了服务器名称” ...
Martin Tournoij 2015年


5

如前所述,所有客户端服务器功能已在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');尽管您可能希望将其包装在函数中,因为--serverstart如果已经存在,它将不会像Vim一样附加数字)。

您可以使用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-removeshell命令发送相同的字节,但是RPC API使用了一些不平凡的非文本协议(“ MessagePack RPC”),并且弄清楚要发送的确切字节对于本文而言有点费力; -)

有关:help rpcNeovim的RPC API的完整详细信息,请参见。


注意:help remote.txthelp server2client()Neovim中仍然存在NB 以及许多其他帮助项目(例如,还有更多),但是这些都不起作用。似乎删除此功能的人都做得很草率。


这是一个很好的答案。它使我能够编写自己的,简单的,与Windows兼容的neovim-remote,以便在Windows中运行:terminal。有了这些信息,这非常容易。
大卫,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.