Каковы различия между: wq <cr>: x <cr> и ZZ при выходе из vim?

39

Ви и Вим, как вы все знаете, имеют много синонимов. Есть три способа сохранить файл и выйти из Vim и Vi. Это : WQ <CR> , : х <CR> и ZZ . Я слышал, что они в некотором роде разные.

Есть ли практические различия между использованием:

:x<cr>

:wq<cr>

или

ZZ

сохранить файл и выйти из Vim и Vi?

wefwefa3
источник
Ответ прост: они одинаковы.
Жоао
2
Они не одинаковы. Я не знаю точно разницу, но это что-то о записи, а не записи в файл, если не было внесено никаких изменений (например, обновление метки времени).
Wildcard
1
Кроме того, с практической точки зрения ZZ(или ZQ) короче и легче набирать
текст
:help :wq, :help ZZ, :help :x. Это прямо в документах.
Энтони

Ответы:

40

Из документации Vim, :xи ZZэквивалентны; они сохраняют файл, только если он был изменен, а затем выходят из 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 с другой стороны, записывает файл и выходит из Vim (при условии наличия соответствующих разрешений).

Акшай
источник
10

Как Акшай отметил, документация Vim объясняет, что :xи ZZэквивалентны , и только сохранить файл , если связанный буфер был изменен. Принимая во внимание, :wqчто буфер сохраняет в соответствующий файл, даже если он не изменился.

В обоих случаях содержимое буфера будет сохранено на диск. Очевидно, что результат один и тот же, так зачем беспокоиться, верно? Но подождите ... Есть тонкая, но не несущественная разница.

Если вы выйдете из Vim через :xбуфер, и в буфере не было никаких изменений, время изменения этого файла не изменится. С другой стороны, если вы выйдете через :wq, время изменения изменится, так как файл технически переписан (сохранен снова).

Это может иметь некоторое влияние в определенных ситуациях. Например, процесс резервного копирования, который зависит от времени модификации, может сохранить этот файл (и, возможно, отправить его по сети), даже если дополнительная информация не была включена. Или какой-то процесс мониторинга может подать сигнал тревоги, если обнаружит, что (для него) файл был изменен ...

Изменить: я забыл упомянуть, чтобы оставить измененный буфер / файл без изменения времени модификации, :q(без w) будет работать тоже.

m4110c
источник
3
Кроме того, некоторые автокоманды будут выполняться только при записи файла. Они не запустятся, если файл не изменился и Vim завершил работу с ZZ или: x.
Spidey