Які відмінності між: wq <cr>: x <cr> і ZZ при виході з vim?


38

У Vi і Vim, як всі ви знаєте, є багато синонімів. Я знаю три способи зберегти файл та вийти з Vim та Vi. Це : WQ <CR> , : х <CR> і ZZ . Я чув, що вони в чомусь різні.

Чи є практичні відмінності між використанням:

:x<cr>

:wq<cr>

або

ZZ

зберегти файл та вийти з Vim та Vi?


Проста відповідь: вони однакові.
JJoao

2
Вони не однакові. Я точно не знаю різниці, але мова йде про те, щоб записати, а не записати у файл, якщо жодних змін не було (тобто оновлення часової позначки).
Wildcard

1
Крім того, з практичної точки зору, ZZ(або ZQ) коротше і простіше набрати ...
VanLaser

: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 (за умови належних дозволів).


9

Як Акшай зазначив, документація Vim пояснює, що :xі ZZеквівалентні , і тільки зберегти файл , якщо пов'язаний буфер був змінений. В той :wqчас як буфер зберігає відповідний файл, навіть якщо він не змінюється.

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

Якщо ви виходите з Vim через, :xа буфер не змінився, час модифікації цього файлу не зміниться. З іншого боку, якщо ви вийдете з програми :wq, час модифікації зміниться, оскільки файл буде технічно переписаний (знову збережений).

Це може мати певний вплив у певних ситуаціях. Наприклад, процес резервного копіювання, який залежить від часу модифікації, може зберігати цей файл (і, можливо, надсилати його по мережі), навіть якщо додаткова інформація не була включена. Або якийсь процес моніторингу може викликати сигнал тривоги, якщо він виявить, що (для нього) файл був змінений ...

Редагувати: я забув згадати, для того, щоб залишити модифікований буфер / файл, не змінюючи час модифікації, a :q(без w) теж буде працювати.


2
Також деякі автокоманди працюватимуть лише тоді, коли файл записаний. Вони не запускаються, якщо файл не змінився, а Vim закривається із ZZ або: x.
Spidey
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.