Was sind die Unterschiede zwischen: wq <cr>: x <cr> und ZZ beim Beenden von vim?

38

Wie Sie alle wissen, haben Vi und Vim viele Synonyme. Ich kenne drei Möglichkeiten, um die Datei zu speichern und Vim und Vi zu beenden. Dies sind : wq <cr> , : x <cr> und ZZ . Ich habe gehört, dass diese in irgendeiner Weise unterschiedlich sind.

Gibt es praktische Unterschiede zwischen der Verwendung von:

:x<cr>

:wq<cr>

oder

ZZ

Datei speichern und Vim und Vi beenden?

wefwefa3
quelle
Die einfache Antwort: Sie sind gleich.
JJoao
2
Sie sind nicht dasselbe. Ich kenne den Unterschied nicht genau, aber es geht darum, zu schreiben oder nicht in die Datei zu schreiben, wenn keine Änderungen vorgenommen wurden (dh den Zeitstempel zu aktualisieren).
Wildcard
1
Aus praktischer Sicht ist ZZ(oder ZQ) auch kürzer und einfacher zu tippen ...
VanLaser
:help :wq, :help ZZ, :help :x. Es ist genau dort in den Dokumenten.
Antony

Antworten:

40

Aus der Dokumentation von Vim :xund ZZsind gleichwertig; Sie speichern die Datei nur, wenn sie geändert wurde, und beenden dann Vim:

Write current file, if modified, and quit (same as ":x").  
(Note: If there are several windows for the
current file, the file is written if it was modified and the window is closed).

:wq Auf der anderen Seite schreibt die Datei und beendet Vim (unter der Annahme der richtigen Berechtigungen).

akshay
quelle
9

Wie akshay wies darauf hin, Vim Dokumentation erklärt, dass :xund ZZgleichwertig sind und nur Speichern einer Datei , wenn der zugehörige Puffer geändert wurde. Während :wqspeichert den Puffer in der entsprechenden Datei, auch wenn es unverändert ist.

In beiden Fällen wird der Inhalt des Puffers auf der Festplatte gespeichert. Offensichtlich ist das Ergebnis dasselbe. Warum also? Aber warte ... Es gibt einen subtilen, aber nicht irrelevanten Unterschied.

Wenn Sie Vim über beenden :xund der Puffer nicht geändert wurde, wird die Änderungszeit dieser Datei nicht geändert. Wenn Sie jedoch über beenden :wq, ändert sich die Änderungszeit, da die Datei technisch neu geschrieben (erneut gespeichert) wird.

Dies kann in bestimmten Situationen einige Auswirkungen haben. Beispielsweise könnte ein Sicherungsvorgang, der von der Änderungszeit abhängig ist, diese Datei speichern (und möglicherweise über das Netzwerk senden), auch wenn keine zusätzlichen Informationen enthalten sind. Oder ein Überwachungsvorgang kann einen Alarm auslösen, wenn festgestellt wird, dass die Datei (dafür) geändert wurde ...

Bearbeiten: Ich habe vergessen zu erwähnen, dass ein :q(ohne das w) auch funktionieren wird, um einen geänderten Puffer / eine geänderte Datei zu verlassen, ohne die Änderungszeit zu ändern .

m4110c
quelle
2
Außerdem werden einige Autobefehle nur ausgeführt, wenn die Datei geschrieben wird. Sie werden nicht ausgeführt, wenn die Datei nicht geändert wurde und Vim mit ZZ oder: x beendet wird.
Spidey