Comment utiliser --servername et --remote dans neovim?

15

dans vim je peux faire vim --servername fooet vim --servername foo --remote-silent bar.txtouvrir des fichiers dans une instance de vim à partir de plusieurs fenêtres de terminal (via tmux ou autre). Comment la même chose est-elle réalisée dans NeoVim?

Rafael Vega
la source

Réponses:

8

Autant que je sache, vim possède cette fonctionnalité car l'interface graphique vim (gvim) utilise le serveur graphique X. Je suis conscient que Vim non GUI peut également utiliser l' --servernameargument mais uniquement lorsque X11 est en cours d'exécution et également en y accédant . En revanche, neovim n'a pas de support graphique; pour cette raison, je ne pense pas que l' --servernameoption puisse fonctionner (sauf si l'option aurait été entièrement réécrite d'une autre manière) car je trouverais étrange qu'un programme de console n'accède au serveur X11 qu'à cette fin.

Thomas Baruchel
la source
Au début, je pensais que cette réponse était fausse, car IPC sans X n'est pas seulement possible, mais aussi très courant (par exemple, les sockets). Mais :help x11-clientserversemble le confirmer: "La communication entre le client et le serveur passe par le serveur X. [..] Un Vim non GUI avec accès à l'affichage X11 (| xterm-clipboard | activé), peut également servir de serveur de commandes si un nom de serveur est explicitement donné "...
Martin Tournoij
7

Neovim remote est un script python pour contrôler les processus neovim. Il a le style vim --servername et --remote. C'est ce que j'utilise maintenant pour mon environnement de travail à plusieurs terminaux.

Rafael Vega
la source
Il convient de mentionner que ce plugin ne fonctionne pas pour la plate-forme Windows.
jdhao
4

Comme mentionné, toutes les fonctionnalités client-serveur ont été supprimées dans Neovim. En effet, ils utilisent la mémoire partagée X11 et Neovim a supprimé le support X11.

Cependant, si j'utilise :help --servernamedans Neovim je me retrouve dans la documentation de la serverstart()fonction:

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')"

Cela fera une prise /tmp/; voir :echo v:servernamepour le chemin. Il est probablement plus utile d'utiliser une adresse plus déterministe (par exemple serverstart('/tmp/nvim-remote'); bien que vous souhaitiez probablement envelopper cela dans une fonction, car elle --serverstartn'ajoutera pas de nombre comme le fait Vim si elle existe déjà).

Vous pouvez envoyer des commandes avec l'API RPC. Pour autant que je puisse trouver, il n'y a aucun moyen d'envoyer des commandes à cela avec seulement Neovim (meh). Vous devrez installer l' un des clients API . Par exemple avec le client API de référence Python (qui est également utilisé par Neovim remote):

import neovim
nvim = neovim.attach('socket', path='/tmp/nvim-remote')
try:
    nvim.command(':e foo')
finally:
    nvim.quit()

Vous pouvez probablement envoyer les mêmes octets avec une echo ... >> /tmp/nvim-removecommande shell, mais l'API RPC utilise un protocole non textuel quelque peu banal ("MessagePack RPC") et déterminer quels octets envoyer exactement était un peu trop d'effort pour ce post; -)

Voir :help rpcpour plus de détails sur l'API RPC de Neovim.


NB :help remote.txtainsi que de nombreux autres éléments d'aide (tels que help server2client()et bien d'autres) existent toujours dans Neovim, mais rien de tout cela ne fonctionne. Il semble que celui qui a supprimé cette fonctionnalité a fait un travail assez bâclé.

Martin Tournoij
la source
Ceci est une excellente réponse. Cela m'a permis d'écrire ma propre version simple et compatible Windows de neovim-remote pour pouvoir l'utiliser :terminal. Compte tenu de ces informations, c'était merveilleusement facile.
David