Wie soll ich Dateien in einem Netzwerk mit Vim bearbeiten?

13

Momentan mache ich es durch SSHing in einen Server und durch Ausführen von Vim auf dem Server. Dies hat den Vorteil, dass Sie sich nicht mit der umständlichen Syntax des Öffnens von Dateien von einem Remoteserver über SCP befassen müssen und vor allem das Dateisystem des Servers sehr schnell durchsuchen können. Auf der anderen Seite hat es Verzögerungen, die das Bearbeiten etwas erschweren.

Wie kann man auf kanonische Weise viele entfernte Dateien bearbeiten?

jcora
quelle
6
Genau so machst du es.
Ignacio Vazquez-Abrams
Wenn vimeine Verzögerung auftritt, deutet dies wahrscheinlich eher auf ein Problem mit Ihrem Netzwerk als auf Ihren Workflow hin.
Joseph R.
ssh [email protected]; vim / etc / somefile - ich dich anmelden und dann feuern Vim
jcora
Eigentlich ist es mit dem Netzwerk. Wenn ich eine Taste drücke, muss ein Paket von Europa in die USA gesendet werden, wo die von mir verwendete Vim-Instanz ausgeführt wird.
Jcora
Sie könnten auch nur tun ssh [email protected] vim /etc/somefile(beachten Sie das Fehlen von ;).
Terdon

Antworten:

26

Sie können SSHFS verwenden , um ein Remotehaus in einem lokalen Ordner bereitzustellen. Hat den Vorteil der Nutzung der aktuellen Infrastruktur und der geringen Latenz von lokalen vim.

Mircea Vutcovici
quelle
1
am besten so imo. nicht nur geringe latenz, sondern nur ein vimrc
exussum
20

Sie können mit einem lokalen VIM oder GVIM aus der Ferne bearbeiten.

:e scp://[email protected]/~/myfiles/whatever.file

scpist ein sicheres Kopierprotokoll . Es wird auf die gleiche Weise wie authentifiziert ssh, sodass Ihr SSH-Schlüssel verfügbar sein muss usw. Es werden verschiedene andere Protokolle unterstützt (siehe :help netrw-externapp), aber SCP ist wahrscheinlich am einfachsten, wenn Sie SSH bereits an derselben Stelle verwenden.

Sie können Verzeichnisse auf diese Weise durchsuchen. Vergewissern Sie sich nur, dass der Pfad mit einem endet /. Andernfalls verwandelt vim es in eine neue Datei.

:wschreibt die Datei automatisch über scp. Wenn das Schreiben aus irgendeinem Grund fehlschlägt, sollten Sie dies beachten, da es sich in der Statusleiste um eine "Shell return 1" -Sache handelt. Beachten Sie jedoch : Wenn Sie dies nicht bemerken, weiß vim es nicht und das kann Konsequenzen haben. Wenn Sie beispielsweise jetzt aufhören, werden Sie nicht gewarnt. Es ist besonders leicht zu übersehen, wenn Sie :waviel benutzen ; Das ist die einzige Einschränkung, die ich habe.

Die offiziellen Dokumente finden Sie unter :help netrw.

Goldlöckchen
quelle
+1 Ich wollte das gerade schreiben. Das netrw-Plugin (das normalerweise standardmäßig installiert ist) bietet eine Vielzahl von Möglichkeiten zum Lesen von Remotedateien .
Greg Hewgill
Ich war zu dieser Option bezieht , als ich sagte: „Das ist der Vorteil von nicht mit umständlichen Syntax Öffnen von Dateien von einem Remote - Server über SCP zu beschäftigen, und, was noch wichtiger ist , in der Lage zu sein , um wirklich die Server-Dateisystem schnell navigieren“ Auf diese Weise scheint mir sehr begrenzt zu sein.
JCORA
1
Um fair zu sein, Ihre Frage erwähnte ursprünglich nicht "Remote-Server über SCP", das später bearbeitet wurde.
Greg Hewgill
@ GregHewgill: Vielen Dank für diesen Hinweis, da ich etwas verwirrt bin - dies ist die einfachste und direkteste Methode für allgemeine Zwecke (kein Verstoß gegen SSHFS!). Wenn das Anhängen einer URL an einen Dateipfad relativ umständlich ist, bin ich gespannt, wie die auszuführende Aufgabe tatsächlich erfordert, dass sich jemand mit einem Editor zusammensetzt, um dies zu tun ... esp. da kann man einfach den befehl pfeil rauf. Aber für jeden etwas.
Goldlöckchen
@GregHewgill Ja, ich weiß, ich habe die Frage während des Umzugs auf mein Handy geschrieben, also habe ich ein paar Sachen unbeabsichtigt weggelassen. Goldlöckchen, ich öffne und schließe ständig Dateien. Navigiere auch durch das Dateisystem und öffne es von dort. Das Anhängen einer URL + Pfad war umständlicher als nur "da sein".
Jcora
2

Ich würde Rsync verwenden. Es wird nur das übertragen, was sich geändert hat. Wie so:

rsync -e ssh -va remoteuser@remotehost:remotedir .

Bearbeiten Sie die Dateien dann nach Belieben vor Ort. Null Verzögerung. Sie können alle Dateien überprüfen, bevor Sie sie festschreiben:

rsync -e ssh -va . remoteuser@remotehost:remotedir

Ich gehe davon aus, dass Sie zuerst Ihr lokales Verzeichnis erstellen und cdin das. Sie können auch festlegen, dass das Entfernen von Dateien behandelt wird. Seien Sie dabei jedoch sehr vorsichtig, da die Ausführung im falschen Verzeichnis einen kompletten Verzeichnisbaum beschädigen kann.

rsync -e ssh -va --delete . remoteuser@remotehost:remotedir

Was ich tue, ist, ich führe es zuerst im "trockenen Modus" aus, indem ich das "n" -Flag benutze, wie folgt:

rsync -e ssh -van --delete . remoteuser@remotehost:remotedir

Es wird berichten, was es getan hätte, wenn es echt gewesen wäre. Wenn ich mit der gemeldeten Liste zufrieden bin, führe ich sie erneut aus und entferne das 'n'-Flag.

rsync ist sehr effizient. Es gibt auch verschiedene andere Flaggen. Es ist ziemlich raffiniert.

Mike
quelle
0

Vielleicht haben Sie den am besten geeigneten Weg genannt - SSH-Weg. Je nach Art der bearbeiteten Dateien können Sie jedoch auch eine kleine Partition zuweisen, diese freigeben und die Dateien dort ablegen, sofern die Sicherheitsrichtlinie diese Aktion zulässt. Für diesen Vorschlag können Sie NFS oder Samba am einfachsten verwenden, aber das Bearbeiten von Testdateien ist unter UNIX eine allgemeine Vorstellung und muss möglicherweise so bleiben, wie Sie es derzeit tun.

VVelev
quelle