no vim eu posso fazer vim --servername foo
e vim --servername foo --remote-silent bar.txt
abrir 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 foo
e vim --servername foo --remote-silent bar.txt
abrir 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 --servername
argumento, 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 --servername
opçã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 --servername
Neovim, 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:servername
o 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, --serverstart
se 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-remove
comando 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 rpc
os 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-clientserver
parece 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 "...