在vim我可以做的vim --servername foo
和vim --servername foo --remote-silent bar.txt
从几个终端窗口(通过TMUX或其他)来打开文件在vim的一个实例。NeoVim如何实现相同的目的?
在vim我可以做的vim --servername foo
和vim --servername foo --remote-silent bar.txt
从几个终端窗口(通过TMUX或其他)来打开文件在vim的一个实例。NeoVim如何实现相同的目的?
Answers:
Neovim remote是用于控制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')
;尽管您可能希望将其包装在函数中,因为--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-remove
shell命令发送相同的字节,但是RPC API使用了一些不平凡的非文本协议(“ MessagePack RPC”),并且弄清楚要发送的确切字节对于本文而言有点费力; -)
有关:help rpc
Neovim的RPC API的完整详细信息,请参见。
注意:help remote.txt
:help server2client()
Neovim中仍然存在NB 以及许多其他帮助项目(例如,还有更多),但是这些都不起作用。似乎删除此功能的人都做得很草率。
:terminal
。有了这些信息,这非常容易。
:help x11-clientserver
似乎证实了这一点:“客户端与服务器之间的通信通过X服务器进行。[..]可以访问X11显示屏(| xterm-clipboard |启用)的非GUI Vim也可以充当命令服务器,如果明确指定了服务器名称” ...