no vim eu posso fazer vim --servername fooe vim --servername foo --remote-silent bar.txtabrir arquivos em uma instância do vim de várias janelas de terminal (via tmux ou o que for). Como a mesma coisa é alcançada no NeoVim?
no vim eu posso fazer vim --servername fooe vim --servername foo --remote-silent bar.txtabrir arquivos em uma instância do vim de várias janelas de terminal (via tmux ou o que for). Como a mesma coisa é alcançada no NeoVim?
Respostas:
Tanto quanto eu sei, o vim tem esse recurso porque a GUI vim (gvim) usa o servidor X gráfico. Estou ciente de que o não GUI Vim também pode usar o --servernameargumento, mas apenas quando o X11 está em execução e também acessando-o . Por outro lado, o neovim não tem suporte gráfico; por esse motivo, não acho que a --servernameopção possa funcionar (a menos que a opção tenha sido totalmente reescrita de outra maneira), pois seria estranho ter um programa de console acessando o servidor X11 apenas para esse fim.
O Neovim remote é um script python para controlar processos neovim. Possui o estilo vim --servername e --remote. É isso que uso agora no meu ambiente de trabalho com vários terminais.
Como mencionado, todos os recursos do servidor de clientes foram removidos no Neovim. Isso ocorre porque eles usam a memória compartilhada X11 e o Neovim removeu o suporte ao X11.
No entanto, se eu usar o :help --servernameNeovim, acabo na documentação da serverstart()função:
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')"
Isso fará um soquete /tmp/; veja :echo v:servernameo caminho. Provavelmente é mais útil usar um endereço mais determinístico (por exemplo serverstart('/tmp/nvim-remote'), embora você provavelmente deseje agrupar isso em uma função, pois ele não acrescentará um número como o do Vim, --serverstartse isso já existir).
Você pode enviar comandos com a API RPC. Até onde eu sei, não há como enviar comandos para isso apenas com Neovim (meh). Você precisará instalar um dos clientes da API . Por exemplo, com o cliente de API Python de referência (que também é o que o Neovim usa remotamente):
import neovim
nvim = neovim.attach('socket', path='/tmp/nvim-remote')
try:
nvim.command(':e foo')
finally:
nvim.quit()
Provavelmente você pode enviar os mesmos bytes com um echo ... >> /tmp/nvim-removecomando shell, mas a API RPC usa um protocolo não-trivial de texto não-trivial ("MessagePack RPC") e descobrir quais bytes enviar exatamente foi um esforço demais para esta postagem; -)
Veja :help rpcos detalhes completos sobre a API RPC da Neovim.
Nota :help remote.txt: assim como muitos outros itens de ajuda (como help server2client()muitos outros) ainda existem no Neovim, mas nada disso funciona. Parece que quem removeu esse recurso fez um trabalho bastante desleixado.
:terminal. Dada essa informação, foi maravilhosamente fácil.
:help x11-clientserverparece confirmar: "A comunicação entre cliente e servidor passa pelo servidor X. [..] Um não GUI Vim com acesso ao monitor X11 (| xterm-clipboard | enabled), também pode atuar como um servidor de comando se um nome de servidor é fornecido explicitamente "...