Wie wird der Befehlsverlauf zwischen mehreren Instanzen von Vim aufgelöst?

15

Vim führt einen Verlauf von ex-Befehlen (auf die über :und zugegriffen werden kann q:), und dieser Verlauf bleibt auch nach dem Beenden erhalten.

Wie vermittelt Vim zwischen den Befehlsverläufen, wenn ich mehrere Instanzen von Vim ausführe (derselbe Benutzer, das gleiche Ausgangsverzeichnis)? Es scheint, dass der letzte Prozess zum Beenden gewinnt. Gibt es eine Möglichkeit, die Befehlsverläufe aller Instanzen zu speichern?

200_erfolg
quelle
1
"Ja wirklich?" Diese Geschichte bleibt nach meinem Rücktritt nicht bestehen. (Vim 7.4.52, Ubuntu 14.04)
Türknauf
3
@Doorknob Stellen Sie sicher, dass Ihr ~/.viminfoEigentum von Ihnen ist. Ein häufiger Fehler besteht darin sudo vim ..., dass Benutzer ausgeführt werden, die, wenn Sie vim noch nicht als eigenen Benutzer ausgeführt haben, ~/.viminfoals Root erstellt werden. Wenn dies das Problem ist, empfehle ich, zu lernen, wie man privilegierte Dateien verwendet sudoeditoder sudo -ebearbeitet.
Jamessan
@ Jamessan Huh, es scheint, dass das in der Tat das Problem war; chownIndem ich mein .viminfo an mich selbst zurückschicke, habe ich es behoben. (Ich bin mir nicht sicher, wie sein Besitz in root geändert wurde, da ich es immer benutzt habe sudoedit, aber
Türknauf

Antworten:

10

Die Antwort auf Ihre Titelfrage ist das, was Sie beobachtet haben. Aus dem vim Benutzerhandbuch:help 21.3

Wenn Sie Vim mehrmals ausführen, werden die Informationen des zuletzt ausgeführten Programms gespeichert. Dies kann dazu führen, dass Informationen, die zuvor gespeicherte Vims verlassen, verloren gehen. Jeder Eintrag kann nur einmal gespeichert werden.

Der Dateiname der viminfo-Datei (in der der Befehlsverlauf gespeichert ist, unter anderem globale Marken und Registerinhalte, falls konfiguriert) kann jedoch geändert werden! Dies bedeutet, dass Sie für verschiedene Projekte oder Instanzen von vim unterschiedliche "Historien" einrichten können. Vorausgesetzt, Sie führen nicht mehr als eine vim-Instanz pro Projekt aus, ist die Verwaltung des viminfo-Dateinamens über vimrc (oder ein anderes Projekteinstellungs-Plugin) eine gute Möglichkeit, dies zu handhaben.

Richten Sie alternative Viminfo-Dateien ein

Für die Verwaltung auf Projektebene möchten wir vim so konfigurieren, dass Ihr viminfo in einer anderen Datei gespeichert wird. Dies kann in einem laufenden vim vor dem Beenden erfolgen, oder von Ihrem vimrc, z. B. haben Sie möglicherweise Zeilen in Ihrem vimrc, die ein bestimmtes Verzeichnis als zu einem Projekt gehörend erkennen.

:set viminfo+=nPath/to/custom/viminfofile

Ein Beispiel dafür, wie vimrc dies basierend auf dem Verzeichnis automatisch einstellt:

 if getcwd() == "/projects/projA"
     set viminfo+=n~/.viminfo-projA
 endif

Dies hat zur Folge, dass der projektspezifische Verlauf beim Start geladen und beim Beenden gespeichert wird, wenn vim im Verzeichnis / projects / projA gestartet wird.

Laden Sie während des Startvorgangs ein alternatives Viminfo

Dies ist gut für den Fall, dass Sie Ihren Verlauf auf der Seite speichern und später laden möchten, ohne ihn auf Projektebene zu verwalten.

Um den Verlauf zu speichern, müssen Sie zunächst wie oben beschrieben die Option viminfo hinzufügen, bevor Sie das Programm beenden. Starten Sie anschließend vim mit der Option -i, um den Verlauf zu laden

vim -i Path/to/custom/viminfofile

Wenn Sie vim nicht beenden möchten, um die viminfo-Datei zu speichern, können Sie :wv( :wviminfo) verwenden. Dadurch wird die viminfo-Datei gespeichert, ohne vim gemäß der obigen n-Einstellung zu beenden. Sie können auch :wv SomeOtherFilean einem Ort speichern, der nicht mit der Einstellung in der Option viminfo übereinstimmt. Dies ist möglicherweise praktischer als das Einrichten des beim Beenden zu verwendenden Dateinamens, hindert vim jedoch nicht daran, die Standarddatei nach dem Beenden zu verwenden.

Zum Beispiel in first vim:

:wv ~/customInfo

und im zweiten Terminal:

vim -i ~/customInfo

Oder wenn bereits ein zweites vim ausgeführt wird und Sie das viminfo laden möchten:

:rv ~/customInfo

Beachten Sie, dass :wvund :rvnicht den Namen der Datei vim beim Verlassen sparen noch den Namen der während der Inbetriebnahme lesen Datei ändern.

Zusätzliche Information

Beschreibung von set viminfo+=nSomePath: Wir verwenden den Befehl set, um die benannte Option anzupassen viminfo. Das +=zeigt an, dass wir an die Option anhängen möchten, nicht alles ändern. Wir hängen die nOption an, die den Dateinamen für viminfo angibt. Unmittelbar danach haben nwir SomePathden Dateinamen, der zum Speichern von viminfo verwendet wird.

Die Dokumentation für wv( :help wv) gibt an, dass dieser Befehl zuerst die viminfo-Datei liest und dann alte und neue Informationen zusammenführt. Bisher habe ich keine Informationen darüber, wie das Zusammenführen in diesem Fall funktioniert, aber ich vermute, dass es Markierungen für unbekannte Dateien und Register enthält, die in der aktuellen Sitzung nicht festgelegt wurden.

John O'M.
quelle