en vim puedo hacer vim --servername foo
y vim --servername foo --remote-silent bar.txt
abrir archivos en una instancia de vim desde varias ventanas de terminal (a través de tmux o lo que sea). ¿Cómo se logra lo mismo en NeoVim?
en vim puedo hacer vim --servername foo
y vim --servername foo --remote-silent bar.txt
abrir archivos en una instancia de vim desde varias ventanas de terminal (a través de tmux o lo que sea). ¿Cómo se logra lo mismo en NeoVim?
Respuestas:
Hasta donde yo sé, vim tiene esta característica porque la GUI vim (gvim) usa el servidor gráfico X. Soy consciente de que no GUI Vim también puede usar el --servername
argumento, pero solo cuando X11 se está ejecutando y también accediendo a él . Por otro lado, neovim no tiene soporte gráfico; por esa razón, no creo que la --servername
opción pueda funcionar (a menos que la opción se hubiera reescrito completamente de otra manera) ya que me parecería extraño que un programa de consola acceda al servidor X11 solo para ese propósito.
Neovim Remote es un script de Python para controlar los procesos de Neovim. Tiene las opciones de estilo vim --servername y --remote. Esto es lo que uso ahora para mi entorno de trabajo de múltiples terminales.
Como se mencionó, todas las características del servidor del cliente se eliminaron en Neovim. Esto se debe a que usan la memoria compartida X11 y Neovim eliminó el soporte X11.
Sin embargo, si lo uso :help --servername
en Neovim termino en la documentación de la serverstart()
función:
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')"
Esto hará un socket en /tmp/
; mira :echo v:servername
por el camino. Probablemente sea más útil usar una dirección más determinista (p serverstart('/tmp/nvim-remote')
. Ej ., Aunque probablemente querrá incluir esto en una función, ya que no agregará un número como el de Vim --serverstart
si ya existe).
Puede enviar comandos con la API RPC. Por lo que puedo encontrar, no hay forma de enviar comandos a esto con solo Neovim (meh). Deberá instalar uno de los clientes API . Por ejemplo, con el cliente de API Python de referencia (que también es lo que usa el control remoto de Neovim):
import neovim
nvim = neovim.attach('socket', path='/tmp/nvim-remote')
try:
nvim.command(':e foo')
finally:
nvim.quit()
Probablemente pueda enviar los mismos bytes con un echo ... >> /tmp/nvim-remove
comando de shell, pero la API RPC utiliza un protocolo sin texto no trivial ("MessagePack RPC") y averiguar qué bytes enviar exactamente fue un esfuerzo demasiado grande para esta publicación; -)
Consulte :help rpc
los detalles completos sobre la API RPC de Neovim.
NB :help remote.txt
, así como muchos otros elementos de ayuda (como help server2client()
y muchos más) todavía existen en Neovim, pero nada de eso funciona. Parece que quien quitó esta característica hizo un trabajo bastante descuidado.
:terminal
. Dada esta información, fue maravillosamente fácil.
:help x11-clientserver
parece confirmarlo: "La comunicación entre el cliente y el servidor pasa por el servidor X. [..] Un Vim sin GUI con acceso a la pantalla X11 (| xterm-clipboard | habilitado), también puede actuar como un servidor de comandos si se da explícitamente un nombre de servidor "...