Jakie są różnice między: wq <cr>: x <cr> i ZZ podczas wychodzenia z vima?

38

Vi i Vim, jak wszyscy wiecie, mają wiele synonimów. Znam trzy sposoby zapisania pliku i wyjścia z Vima i Vi. Są to : wq <cr> , : x <cr> i ZZ . Słyszałem, że są one w pewien sposób różne.

Czy są jakieś praktyczne różnice między używaniem:

:x<cr>

:wq<cr>

lub

ZZ

zapisać plik i wyjść z Vima i Vi?

wefwefa3
źródło
Prosta odpowiedź: są takie same.
JJoao,
2
Są to nie to samo. Nie znam dokładnie różnicy, ale chodzi o zapisywanie, a nie zapisywanie do pliku, jeśli nie dokonano żadnych zmian (tj. Aktualizacji znacznika czasu).
Wildcard,
1
Ponadto z praktycznego punktu widzenia ZZ(lub ZQ) jest krótszy i łatwiejszy do
wpisania
:help :wq, :help ZZ, :help :x. Jest tam w dokumentach.
Antony

Odpowiedzi:

40

Z dokumentacji Vima :xi ZZsą równoważne; zapisują plik tylko wtedy, gdy został zmodyfikowany, a następnie zamykają Vima:

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 z drugiej strony zapisuje plik i zamyka Vima (zakładając odpowiednie uprawnienia).

akshay
źródło
9

Jak Akshay wskazał, dokumentacja Vim wyjaśnia, że :xi ZZsą równoważne i tylko zapisać plik jeśli Associated bufor został zmieniony. Natomiast :wqzapisuje bufor do odpowiedniego pliku, nawet jeśli pozostaje niezmieniony.

W obu przypadkach zawartość bufora zostanie zapisana na dysku. Oczywiście wynik jest taki sam, więc po co zawracać sobie głowę, prawda? Ale czekaj ... Jest subtelna, ale nie bez znaczenia różnica.

Jeśli wyjdziesz z Vima przez :xi nie nastąpi zmiana w buforze, nie będzie zmiany czasu modyfikacji tego pliku. Z drugiej strony, jeśli wyjdziesz przez :wq, czas modyfikacji ulegnie zmianie, ponieważ plik jest technicznie przepisywany (ponownie zapisywany).

Może to mieć pewien wpływ w niektórych sytuacjach. Na przykład proces tworzenia kopii zapasowej zależny od czasu modyfikacji może przechowywać ten plik (i potencjalnie wysyłać go przez sieć), nawet jeśli nie uwzględniono żadnych dodatkowych informacji. Lub jakiś proces monitorowania może wywołać alarm, jeśli wykryje, że (dla niego) plik został zmieniony ...

Edycja: Zapomniałem wspomnieć, aby pozostawić zmodyfikowany bufor / plik bez zmiany czasu modyfikacji, zadziała również :q(bez w).

m4110c
źródło
2
Ponadto niektóre polecenia automatyczne będą działać tylko po zapisaniu pliku. Nie będą działać, jeśli plik się nie zmienił, a Vim zostanie zamknięty za pomocą ZZ lub: x.
Spidey,