Meine Arbeit besteht in der Regel darin, SSH zu verwenden, um eine Verbindung zu verschiedenen Computern herzustellen, und dann vim zu verwenden, um Dateien auf diesen Computern zu bearbeiten. Das Problem ist, dass ich meine .vimrc-Datei ständig kopieren muss. Es ist sehr ärgerlich, vim zu öffnen und keine Einstellungen zu haben. Kann ich meine vim-Einstellungen von Maschine zu Maschine mitnehmen, ohne sie manuell überall hin zu kopieren?
34
set background=dark
oderset background=light
, etwas, das keine Linux-Distribution berührt und für den Benutzer völlig unauffällig ist. </ sarcasm>Antworten:
Ich fühle deinen Schmerz. Ich habe alle meine ~ /.* rc-Dateien unter Versionskontrolle (Subversion). Seitdem ich 1998 mit CVS angefangen habe, hat es großartig funktioniert. Eine Möglichkeit, dies zu tun, besteht darin, alle Ihre RC-Dateien wie folgt auszuchecken, wenn Sie in Ihrem Home-Verzeichnis stehen:
Auf diese Weise werden die Konfigurationsdateien auch auf den verschiedenen Computern synchronisiert und aktualisiert, wenn Sie svn update ausführen.
quelle
Anstatt .vimrc auf jeden Server zu bringen, an dem Sie arbeiten müssen, können Sie die Remote-Dateien von Ihrem lokalen vim aus bearbeiten:
Führen Sie in vim / gvim Folgendes aus:
oder starte vim so:
Dadurch wird die Datei nahtlos geöffnet (sie kopiert die Datei tatsächlich lokal) und beim Speichern wird die bearbeitete Datei für Sie an den Server zurückgesendet.
Sie werden nach einem SSH-Kennwort gefragt, das jedoch über SSH-Schlüssel optimiert werden kann.
Wie andere bereits erwähnt haben, ist der einzige Nachteil dieser Methode, dass Sie keine Pfad- / Dateikonkurrenz erhalten, wie Sie es tun würden, wenn Sie direkt auf dem Computer arbeiten.
Weitere Informationen finden Sie im folgenden Tutorial .
quelle
Sie können ein Bash-Skript erstellen, um es bei jeder Anmeldung automatisch zu kopieren:
Sie können es zum Beispiel ssh_vim nennen. Es ist keine ideale Lösung, sondern löst Ihr Problem.
Sie können es verbessern, um zunächst zu überprüfen, ob es bereits vorhanden ist. Wenn Sie ssh nicht immer auf demselben Computer ausführen, können Sie das Skript ändern, um die Datei von scp von einem anderen Computer abzurufen.
EDIT1
In diesem Zusammenhang können Sie auch das Dateisystem des Remote-Computers mit sshfs mounten. Auf diese Weise profitieren Sie von Ihrer Umgebung und Ihren Tools (nicht nur .vimrc), und Sie verfügen über eine Shell-Vervollständigung (die Sie mit scp: // nicht verwenden können).
EDIT2
Ich habe gerade herausgefunden, dass Sie Ihre .vimrc-Datei mit scp: // wie folgt erstellen können:
Dies funktioniert von der vim-Befehlszeile aus, aber im Moment weiß ich nicht, wie ich es automatisieren soll. Es scheint weder mit der Option '-u' noch mit .vimrc noch mit $ VIMINIT zu funktionieren.
EDIT3
Ich habe es gefunden! Sie können dies tun, um vim mit einer .vimrc-Datei zu starten, die Sie von Ihrem Referenz-Host bezogen haben:
Die Option '-c' führt den Befehl direkt nach dem Start von vim aus.
Sie können einen Alias in der Shell Ihrer Wahl erstellen, um das Eingeben zu vermeiden. In Bash wäre es so:
quelle
Wenn Sie die Public-Key-Authentifizierung verwenden, können Sie diese in folgenden Situationen verwenden
~/.ssh/config
:Mir gefällt es besser als der oben vorgeschlagene Skript-Trick, da er den Aufruf des
ssh
Befehls nicht beeinträchtigt (wenn zusätzliche Parameter usw. angegeben werden).quelle
%u@%n:
,%r@%n:
weil der SSH-Benutzername von meinem Laptop-Benutzernamen abweichtEinige Lösungen:
1) Erstellen Sie eine NFS-Freigabe für Ihren Basisordner und ordnen Sie sie an mehreren Orten zu.
2) Erstellen Sie ein kleines Skript, um Ihre .vimrc-Datei mit einer Identitäts- / Schlüsseldatei an den Server zu senden, zu dem Sie eine Verbindung herstellen. Es könnte ungefähr so aussehen (Pseudocode):
quelle
Die exakt gleiche Antwort wie sunny256, aber benutze git anstelle von SubVersion.
Behalten Sie einen Hauptzweig mit den Dateien bei, die für alle Computer gelten, und einen Zweig für jeden neuen Computer.
Auf diese Weise können Sie auf den meisten Computern fast die gleichen Dateien haben und sind dennoch nicht zu verwirrt.
quelle
Ich weiß, dass dies ein alter Thread ist, aber eine Möglichkeit, wie ich es tue, ist die Verwendung von sshfs, mit dem das Dateisystem über Fuse gemountet wird. Das lokale VIM übernimmt die gesamte Bearbeitung, sodass es keinen Grund gibt, die .vimrc-Datei zu kopieren.
Dies hat den Nachteil, dass ein anderes Terminal für alle Befehle geöffnet sein muss, die auf dem Remote-Server ausgeführt werden müssen, aber für die Bearbeitung finde ich diesen Weg am besten.
Es hat auch den zusätzlichen Vorteil, dass die System-Zwischenablage verwendet werden kann.
quelle
Ich verwalte meine Punktedateien mit https://github.com/andsens/homeshick und speichere sie auf github.
Homeshick ist zu 100% in Bash geschrieben und hilft Ihnen beim Verwalten von "Burgen", die nur Git-Repos sind, die ein / home / -Verzeichnis enthalten. Es verfügt über Befehle, um vorhandene Punktedateien in das Repo zu verschieben und durch Symlinks zu ersetzen. Und um alle Dateien im Repository mit Ihrem Home-Verzeichnis auf einem neuen Computer zu verknüpfen.
Die allgemeine Idee ist also, Ihre Punktedateien in einem Versionskontrollsystem zu belassen und sie vom realen Pfad aus mit Symlinks zu verknüpfen. Auf diese Weise muss Ihr Repo nicht von Ihrem Heimatverzeichnis ausgehen und eine Menge Dateien enthalten, die Sie niemals hinzufügen möchten.
quelle
Wenn Sie so sind wie ich und aus verschiedenen Gründen viele Entwicklungsmaschinen (auch virtuelle Maschinen) haben, können Sie SSH-Schlüssel, ein intelligentes bash_profile und ein RCS Ihrer Wahl kombinieren.
Ich würde zweitens nfs / samaba / sshfs verwenden. Ein Nachteil ist, dass Sie, wenn Sie nicht ständig über Netzwerkzugriff verfügen, nicht auf das zugreifen können, was Sie benötigen (Fliegen, kein WLAN, Firewalls, Routing-Probleme usw.). Die Maschinen, die ich synchron halte, sind nicht alle gleichzeitig erreichbar, aber ich möchte Informationen zwischen ihnen austauschen.
Im Folgenden beschreibe ich, wie ich viele Ideen aus dem Internet entlehnt habe.
.bash_profile könnte so etwas haben
Ich habe das von ein paar Stellen bekommen, kann aber jetzt keinen Link dazu finden. Die Datei shell_ssh_agent:
Jetzt beim ersten Login richten Sie Ihre Schlüssel ein. Logge dich aus und wieder ein und es hat dir das Leben einfacher gemacht.
Platzieren Sie alle Ihre Skripte in einem RCS, um die Synchronisierung der Entwicklungsmaschinen zu vereinfachen. Ich benutze Git. Die Authentifizierung mit git erfolgt über ssh, daher helfen auch hier ssh-Schlüssel. Beachten Sie, dass Sie an dieser Stelle so etwas wie nfs hätten verwenden können. Ich wäre immer noch ein Fan eines RCS aus einem Grund, den ich unten erwähne.
Der Anwendungsfall ist
Als nächstes möchte ich versuchen, das erste Login / Setup in ein Makefile zu packen, das ich auf den neuen Rechner kopiere. Das Makefile kann dann die Aufgabe übernehmen, Ihre Schlüssel, RCS usw. einzurichten. Offensichtlich ist hier ein gewisser Overhead zu verzeichnen, aber wenn Sie am Ende viele Maschinen einrichten, ist dies:
quelle
Ich verwende ein Makefile mit einer Liste aller Server, auf denen ich mich anmelde. Wenn ich auf meinem lokalen Computer eine Änderung vornehme, wird make mit dem Makefile automatisch ausgeführt, wodurch alle Server mit Änderungen oder Plugins aktualisiert werden
quelle
.PHONY.
" istsshrc löst dieses Problem. Sie geben Ihre .vimrc in ~ / .sshrc.d / ein und fügen
export VIMINIT="let \$MYVIMRC='$SSHHOME/.sshrc.d/.vimrc' | source \$MYVIMRC"
sie dann zu `/.sshrc hinzu.quelle
Ich habe ein einfaches Tool dafür geschrieben, mit dem Sie Ihre .vimrc-Datei nativ transportieren können, wenn Sie ssh verwenden , indem Sie die in SSHd integrierten Konfigurationsoptionen auf eine nicht standardmäßige Weise verwenden.
Keine zusätzliche
svn
,scp
,copy/paste
usw. erforderlich.Es ist einfach, leicht und funktioniert standardmäßig mit allen Serverkonfigurationen, die ich bisher getestet habe.
https://github.com/gWOLF3/viSSHous
quelle
Verwendung der Variablen VIMINIT:
und Weiterleiten an Remote-Server:
ist einfach mit .bash_profiles oder .bashrc
Versuchen Sie nun, vim auf einem Remote-Server mit sshh für die Verbindung auszuführen:
Wenn Sie möchten, können Sie Ihre Plugins auch auf den Remote-Server übertragen:
quelle
Ich habe die gleiche Situation, aber es ist nicht nur "
.vimrc
". Ich habe auch Dinge wieMeine Lösung (die vor 30 Jahren ursprünglich mit "dist" begann!) Besteht darin, einen nächtlichen Cron einzurichten, um eine minimale Heimkonfiguration für alle Maschinen, auf denen ich arbeite, zu synchronisieren, damit diese nachts aktualisiert werden.
Auf diese Weise werden alle anderen Maschinen, mit denen ich arbeite, auf dem neuesten Stand gehalten! Ich kann einfach einen neuen Computer zur Liste der Konten hinzufügen und eine einzelne Computerverteilung durchführen, um ihn zu starten.
Muss nicht viel sein, und Sie können klein anfangen und es im Laufe der Zeit komplexer gestalten. Wie Sie sich nach 30 Jahren vorstellen können, ist meine Distribution jetzt ziemlich komplex, daher werde ich sie hier nicht mehr veröffentlichen. Es ist unnötig zu erwähnen, dass es auch Dinge wie das Austauschen einer Konfiguration für andere für einige Netzwerke, die Bereinigung von Privathaushalten (z. B. Papierkorb, Cache-Dateien), die Sicherstellung, dass alle Privathaushaltsberechtigungen korrekt sind usw. ausführt.
ANMERKUNG Ich erlaube nur die passwortlose SSH-Anmeldung von einem 'Heim' Computer zu allen anderen, nie wieder zurück! Jeder Cross-SSH ist passwortgeschützt.
quelle
Sie könnten ein EXPECT-Skript in Betracht ziehen, mit dem Sie Ihren Pfad und Ihre Umgebung (wie EXRC-Variablen) festlegen können, wenn Sie eine bestimmte Taste drücken. Es sollte nicht zu lange dauern, bis jemand ein ähnliches Skript veröffentlicht.
Wenn Ihre Serverfarmen mehr als ein paar Dutzend Serverfarmen umfassen (denken Sie an Tausende), ist es ein echter Lebensretter, wenn Sie Ihre Umgebung einfach auf einer "jungfräulichen" Box einrichten
Wenn ich mich bei einer Box anmelde, wird häufig zum ersten Mal mein Homedir erstellt!
quelle
Es wurde mit dem folgenden Bash Oneliner realisiert. Da dies mit Process Substitution erfolgt, werden keine temporären Dateien erstellt.
https://gist.github.com/blacknon/a47083f3bbbd0374998bdf7e3b3396cc
quelle