Was sind praktische Anwendungen des Client-Server-Modus?

23

Ich weiß, dass Vim einen Client-Server-Modus zulässt ( :h clientserver): Es ist möglich, ihn in einen Server zu verwandeln, der einige Befehle erhält und diese ausführt, und als Client, der die Befehle an den Server sendet.

Ich verstehe, wie es funktioniert, kann mir aber keinen praktischen Einsatz dieser Funktion vorstellen: In welchen Fällen ist es nützlich und welcher Workflow kann mit dieser Funktion erstellt werden?

Meine Frage ist also einfach: Wozu dient der Client-Server-Modus von Vim?

(Ich weise erneut darauf hin, dass es bei meiner Frage nicht darum geht, wie es funktioniert oder wie es funktioniert, sondern warum es verwendet wird.)

statox
quelle
2
Ich neige dazu, dies als zu weit zu schließen.
muru
3
Ich würde den Abschluss als zu weit verstehen. SE ist vielleicht nicht die am besten angepasste Plattform für diese Frage, aber ich habe das Gefühl, dass mir etwas an dieser Funktion fehlt, sodass ich dachte, andere könnten von diesen Antworten profitieren.
statox

Antworten:

21
  • Vor der Channel- / Job-Recent-Funktion von Vim 7.4 war die Client-Server-Funktion die einzige Möglichkeit, eine ordnungsgemäße Hintergrundkompilierung durchzuführen - ohne Abhängigkeit von Python. Wir starten die Kompilierung als Hintergrundjob, und wenn sie abgeschlossen ist, wird vim dank des Client-Server-Kanals darüber informiert, dass sie abgeschlossen ist.

  • Es wird auch indirekt von "Plugins" wie pyclewn verwendet, um einen Debugger in vim zu integrieren. Tatsächlich verwendet pyclewn die Funktion + netbeans (die auf + clientserver aufbaut). Andere bemerkenswerte Projekte verwenden diese NetBeans-Schnittstelle, um vim in eine IDE zu integrieren - siehe :h netbeans-intro.

  • Es wird auch von einigen Test-Plugins wie vimrunner verwendet, um Tests in Vim über die Befehlszeile auszuführen. Ich benutze es, um meine Plugins auf Travis zu testen.

  • Ich erinnere mich auch, dass ich dank + clientserver meine Klicks in der xdvi-Oberfläche mit meinem LaTeX-Quellcode synchronisiert habe.

Luc Hermitte
quelle
1
Daher ist es nützlich, nicht direkt vom Benutzer, sondern von Drittanbieteranwendungen verwendet zu werden. Vielen Dank für Ihre Antwort, die ziemlich interessant ist.
statox
4
@statox Ja. Das sind die wichtigsten Anwendungsfälle, die ich sehe: einfache Integration in externe Tools. Einfach, weil wir vim-Befehle und -Funktionen über die Befehlszeile eingeben können.
Luc Hermitte
1
Eclim ist ein weiteres Beispiel dafür.
Goldlöckchen
13

Mein Gebrauch davon ist etwas simpler (und vielleicht alltäglicher) als der von Luc Hermitte.

Wenn Sie eine Instanz von gvim mit dieser kompilierten Version starten (und dies ist und war für eine lange Zeit, zum Beispiel auf großen Linux-Distributionen wie Fedora und Debian), wird sie im Servermodus gestartet. Ich habe "gvim" hervorgehoben, weil das, was ich hier beschreibe, nicht auf eine einzelne vimInstanz in einem GUI-Terminal zutrifft (obwohl ich vermute, dass dies der Fall sein könnte, wenn Sie den Parameter entsprechend verwenden).

Wie auch immer, Sie können dann jede Datei von überall in dieser gvim-Instanz mit gvim --remote [file path](ohne --servernameAngabe) öffnen . Ich bin ein Fan davon, weil ich mit vim nicht viel direkt im Dateisystem navigiere. Stattdessen verwende ich einen orthodoxen Dateibrowser (Midnight Commander) - oder vielmehr Stapel von ihnen öffnen sich zu verschiedenen Orten, da sie mcleichtgewichtig sind und verschiedene Farbschemas ermöglichen, um die Unterscheidung zwischen ihnen zu vereinfachen Tabs in mindestens einem GUI-Terminal). Ich denke jedoch, dass das gleiche Prinzip für jeden Dateibrowser gilt, der Ihnen eine Form von benutzerdefiniertem Tastenkürzel ermöglicht, mit dem Sie sich verbinden können gvim --remote %f. In mcich es im Benutzermenü, also F2 + e und die markierte / ausgewählte Datei wird auf die Gvim Instanz gesendet.

Dies wird ein wenig besser: Wenn Sie eine zweite Instanz von gvim öffnen, z. B. auf Monitor 2 desselben Desktops, oder auf einem separaten Desktop und möglicherweise einem anderen Farbschema in diesem, und diesmal explizit angeben --servername foo, können Sie senden Dateien zu dieser Instanz stattdessen mit:

 gvim --servername foo --remote [file path]

Etwas, das sich je nach Umfang Ihrer Tätigkeit als nützlich erweisen kann oder auch nicht.

Goldlöckchen
quelle
Das ist ein Anwendungsfall, den ich mir nicht vorgestellt hatte, aber wenn Sie nicht gerne von Vim aus durch Ihre Dateien navigieren, kann dies eine gute Lösung sein.
statox
Nun, ich würde es nicht als "Workaround" betrachten, da das andere, was ich minimal mit dem Dateibrowser mache, gleichzeitig darin besteht, auf Dateien an denselben Orten zu blicken (für Text über less, der sofort und einer ist) Taste zum Beenden) und möglicherweise an andere Anwendungen als vim senden, die ebenfalls einen Remote-Modus wie diesen haben (viele Dinge tun dies jetzt, einschließlich anderer "Editoren", die ich manchmal verwende, um gestapelte Registerkarten von Headern zum Anzeigen zu belassen, und auch an Webbrowser) . Anders ausgedrückt, ich würde sagen, das Navigieren im fs mit vim scheint eine mc--remote
Abhilfe zu sein, wenn
1
Ja, das ist ein Workflow für sich und keine Problemumgehung. Meine Formulierung war nicht ideal, aber ich habe die Idee Ihrer Antwort verstanden
;-)
1
Wenn ich mit Visual Studio arbeite, bearbeite ich den größten Teil in Vim. Ich benutze diese Funktion, um die aktuelle Datei (mit dem Cursor an derselben Stelle) per Tastendruck zu öffnen. Siehe die Vim als externes Tool Abschnitt über die Integration von gvim mit Visual Studio Vim Tipps Seite, wie dies einzurichten.
Rich
5

Embedded-Entwicklung. In der Embedded-Entwicklung haben Sie häufig einen IP-Socket, aber nur begrenzten lokalen Festplattenspeicher oder keinen nichtflüchtigen Speicher oder eine Reihe anderer Dinge. Sie können einen Server auf der eingebetteten Karte starten und dann auf Ihrem Entwicklungscomputer mit dem Client verbinden und alle Konfigurations- und Tag-Einstellungen lokal vornehmen.

Sam
quelle
1

Ich habe meine Masterarbeit mit Vim, LaTeX und BibTeX geschrieben. Um meine BibTeX-Referenzen zu verwalten, habe ich ein Programm namens JabRef verwendet . JabRef verfügt über eine nette kleine Funktion, mit der Sie eine Verbindung zu einer Vim-Serverinstanz herstellen können. Anschließend können Sie die BibTeX-Referenz von JabRef auf das in Vim bearbeitete LaTeX-Dokument "pushen".

Phantom-99w
quelle
1

Mein Arbeitsablauf ähnelt dem, was Goldlöckchen in seiner Antwort gesagt haben. Ich verwende die :terminalFunktion von vim8 in Kombination mit der --remoteOption. Ich halte 2 Fensterlayout in vim. Code im linken Fenster und Terminal rechts. Ich verwende das rechte Fenster (Terminal), um Kompilierungen auszuführen, im Dateisystem zu navigieren und Dateien in der aktuellen vim-Instanz (vom Terminal aus) zu öffnen. Dieser Ablauf ermöglicht es mir, mit sehr wenig Mausbeteiligung zu arbeiten.

Ich benutze gvim und icewm (jeder Fenstermanager sollte das tun)

Starten Sie eine gvim-Instanz

gvim somefile

Öffnen Sie in gvim das Terminal in vertikaler Aufteilung

:botright vertical terminal
(or) short form
:bo vert term 
"botright" splits the window to right

Im Terminalfenster geteilt

gvim --remote-send '<C-w><C-w>' --remote anotherfile

"--remote-send" will send Ctrl-W Ctrl-W to remote gvim instance(in our case, current instance) 
to put the cursor in the left window. Otherwise, the terminal split would be replaced by
'anotherfile' buffer.
"--remote" will open 'anotherfile' in left window.

Sie können Aliase für diese langen Befehle in Ihrem .zshrc / .bashrc erstellen und sie nach Ihren Wünschen kürzen.

Mit diesem Workflow verlasse ich meine gvim-Instanz selten und benutze selten die Maus.

SantoshSrinivas
quelle