in vim kann ich tun , vim --servername foo
und vim --servername foo --remote-silent bar.txt
zum Öffnen von Dateien in einer Instanz von Vim von mehreren Terminalfenstern (über tmux oder was auch immer). Wie wird dasselbe in NeoVim erreicht?
in vim kann ich tun , vim --servername foo
und vim --servername foo --remote-silent bar.txt
zum Öffnen von Dateien in einer Instanz von Vim von mehreren Terminalfenstern (über tmux oder was auch immer). Wie wird dasselbe in NeoVim erreicht?
Antworten:
Soweit ich weiß, verfügt vim über diese Funktion, da die grafische Benutzeroberfläche vim (gvim) den grafischen X-Server verwendet. Mir ist bekannt, dass Vim, das keine grafische Benutzeroberfläche ist, das --servername
Argument auch verwenden kann, jedoch nur, wenn X11 ausgeführt wird und auch, wenn darauf zugegriffen wird . Auf der anderen Seite hat Neovim keine grafische Unterstützung; Aus diesem Grund glaube ich nicht, dass die --servername
Option funktionieren kann (es sei denn, die Option wäre auf andere Weise vollständig umgeschrieben worden), da ich es seltsam finde, wenn ein Konsolenprogramm nur zu diesem Zweck auf den X11-Server zugreift.
Neovim Remote ist ein Python-Skript zur Steuerung von Neovim-Prozessen. Es verfügt über die Optionen --servername und --remote im Vim-Stil. Dies ist, was ich jetzt für meine Arbeitsumgebung mit mehreren Terminals verwende.
Wie bereits erwähnt, wurden alle Clientserver-Funktionen in Neovim entfernt. Dies liegt daran, dass sie den gemeinsam genutzten X11-Speicher verwenden und Neovim die X11-Unterstützung entfernt hat.
Wenn ich jedoch :help --servername
in Neovim verwende, lande ich in der Dokumentation für die serverstart()
Funktion:
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')"
Dies wird einen Socket in machen /tmp/
; suche :echo v:servername
nach dem Weg. Es ist wahrscheinlich sinnvoller, eine deterministischere Adresse zu verwenden (z serverstart('/tmp/nvim-remote')
. B. , obwohl Sie diese wahrscheinlich in eine Funktion einschließen möchten, da keine Zahl angehängt wird, wie dies bei Vim der --serverstart
Fall ist, wenn diese bereits vorhanden ist).
Sie können Befehle mit der RPC-API senden. Soweit ich weiß, gibt es keine Möglichkeit, mit nur Neovim (meh) Befehle an diese zu senden. Sie müssen einen der API-Clients installieren . Zum Beispiel mit dem Referenz-Python-API-Client (der auch von Neovim Remote verwendet wird):
import neovim
nvim = neovim.attach('socket', path='/tmp/nvim-remote')
try:
nvim.command(':e foo')
finally:
nvim.quit()
Sie können wahrscheinlich die gleichen Bytes mit einem echo ... >> /tmp/nvim-remove
Shell-Befehl senden , aber die RPC-API verwendet ein nicht triviales Nicht-Text-Protokoll ("MessagePack RPC"). -)
Sehen Sie :help rpc
für die vollständigen Angaben über Neovim RPC - API.
NB :help remote.txt
sowie viele andere help server2client()
Hilfethemen (wie und viele mehr) gibt es in Neovim immer noch, aber nichts davon funktioniert. Es sieht so aus, als hätte jeder, der diese Funktion entfernt hat, einen ziemlich schlampigen Job gemacht.
:terminal
. Angesichts dieser Informationen war es wunderbar einfach.
:help x11-clientserver
scheint es zu bestätigen: "Die Kommunikation zwischen Client und Server läuft über den X-Server. [..] Ein Vim ohne GUI mit Zugriff auf das X11-Display (| xterm-clipboard | enabled) kann auch als Befehlsserver fungieren, wenn ein Servername wird explizit vergeben "...