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?
command-line
command-history
persistent-state
200_erfolg
quelle
quelle
~/.viminfo
Eigentum von Ihnen ist. Ein häufiger Fehler besteht darinsudo vim ...
, dass Benutzer ausgeführt werden, die, wenn Sie vim noch nicht als eigenen Benutzer ausgeführt haben,~/.viminfo
als Root erstellt werden. Wenn dies das Problem ist, empfehle ich, zu lernen, wie man privilegierte Dateien verwendetsudoedit
odersudo -e
bearbeitet.chown
Indem 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 habesudoedit
, aberAntworten:
Die Antwort auf Ihre Titelfrage ist das, was Sie beobachtet haben. Aus dem vim Benutzerhandbuch
:help 21.3
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.
Ein Beispiel dafür, wie vimrc dies basierend auf dem Verzeichnis automatisch einstellt:
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
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 SomeOtherFile
an 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:
und im zweiten Terminal:
Oder wenn bereits ein zweites vim ausgeführt wird und Sie das viminfo laden möchten:
Beachten Sie, dass
:wv
und:rv
nicht 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 anzupassenviminfo
. Das+=
zeigt an, dass wir an die Option anhängen möchten, nicht alles ändern. Wir hängen dien
Option an, die den Dateinamen für viminfo angibt. Unmittelbar danach habenn
wirSomePath
den 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.quelle