in vim posso fare vim --servername foo
e vim --servername foo --remote-silent bar.txt
aprire i file in un'istanza di vim da più finestre di terminale (via tmux o altro). Come si ottiene la stessa cosa in NeoVim?
in vim posso fare vim --servername foo
e vim --servername foo --remote-silent bar.txt
aprire i file in un'istanza di vim da più finestre di terminale (via tmux o altro). Come si ottiene la stessa cosa in NeoVim?
Risposte:
Per quanto ne so vim ha questa funzione perché la GUI vim (gvim) utilizza il server X grafico. Sono consapevole che anche Vim non GUI può utilizzare l' --servername
argomento, ma solo quando X11 è in esecuzione e accedendo ad esso . D'altra parte, neovim non ha supporto grafico; per questo motivo, non penso che l' --servername
opzione possa funzionare (a meno che l'opzione non sarebbe stata completamente riscritta in un altro modo) poiché troverei strano avere un programma console che accedesse al server X11 solo a tale scopo.
Neovim Remote è uno script Python per il controllo dei processi Neovim. Ha lo stile vim --servername e --remote opzioni. Questo è quello che uso ora per il mio ambiente di lavoro multi-terminale.
Come accennato, tutte le funzionalità del server dei client sono state rimosse in Neovim. Questo perché usano la memoria condivisa X11 e Neovim ha rimosso il supporto X11.
Tuttavia, se uso :help --servername
in Neovim finisco nella documentazione per la serverstart()
funzione:
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')"
Questo renderà un socket in /tmp/
; vedere :echo v:servername
per il percorso. Probabilmente è più utile usare un indirizzo più deterministico (ad esempio serverstart('/tmp/nvim-remote')
; anche se probabilmente vorrai racchiuderlo in una funzione, poiché non aggiungerà un numero come quello di Vim --serverstart
se esiste già).
È possibile inviare comandi con l'API RPC. Per quanto posso trovare non c'è modo di inviare comandi a questo solo con Neovim (meh). Devi installare uno dei client API . Ad esempio con il client API Python di riferimento (che è anche ciò che utilizza Neovim Remote):
import neovim
nvim = neovim.attach('socket', path='/tmp/nvim-remote')
try:
nvim.command(':e foo')
finally:
nvim.quit()
Probabilmente puoi inviare gli stessi byte con un echo ... >> /tmp/nvim-remove
comando shell, ma l'API RPC utilizza un protocollo non testuale non banale ("MessagePack RPC") e capire quali byte inviare esattamente è stato un po 'troppo sforzo per questo post; -)
Per :help rpc
i dettagli completi sull'API RPC di Neovim.
NB :help remote.txt
così come molti altri articoli di aiuto (come help server2client()
e molti altri) esistono ancora in Neovim, ma nessuno di questi funziona. Sembra che chiunque abbia rimosso questa funzione abbia fatto un lavoro piuttosto sciatto.
:terminal
. Date queste informazioni è stato meravigliosamente facile.
:help x11-clientserver
sembra confermarlo: "La comunicazione tra client e server passa attraverso il server X. [..] Un Vim non GUI con accesso al display X11 (| xterm-clipboard | abilitato), può anche fungere da server di comando se un nome server viene esplicitamente assegnato "...