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?
save
filesystem
quit
original-vi
wefwefa3
quelle
quelle
ZZ
(oderZQ
) auch kürzer und einfacher zu tippen ...:help :wq
,:help ZZ
,:help :x
. Es ist genau dort in den Dokumenten.Antworten:
Aus der Dokumentation von Vim
:x
undZZ
sind gleichwertig; Sie speichern die Datei nur, wenn sie geändert wurde, und beenden dann Vim::wq
Auf der anderen Seite schreibt die Datei und beendet Vim (unter der Annahme der richtigen Berechtigungen).quelle
Wie akshay wies darauf hin, Vim Dokumentation erklärt, dass
:x
undZZ
gleichwertig sind und nur Speichern einer Datei , wenn der zugehörige Puffer geändert wurde. Während:wq
speichert 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
:x
und 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 dasw
) auch funktionieren wird, um einen geänderten Puffer / eine geänderte Datei zu verlassen, ohne die Änderungszeit zu ändern .quelle