退出vim时:wq <cr>:x <cr>和ZZ有什么区别?


38

众所周知,Vi和Vim有许多同义词。我知道有三种保存文件并退出Vim和Vi的方法。这些是:WQ <CR> :X <CR>ZZ。我听说这些在某些方面有所不同。

使用之间有什么实际区别:

:x<cr>

:wq<cr>

要么

ZZ

保存文件并退出Vim和Vi?


简单的答案:它们是相同的。
JJoao 2015年

2
他们一样。我不知道到底有什么区别,但这是关于写入与不写入文件(如果未进行更改)(即更新时间戳)的一些事情。
2015年

1
另外,从实际的角度来看,ZZ(或ZQ)更短
且更

:help :wq:help ZZ:help :x。就在文档中。
安东尼

Answers:


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

正如akshay所指出的那样,Vim的文档对此进行了解释,它们:xZZ等同,并且仅在相关缓冲区已更改的情况下保存文件。而:wq将缓冲区保存到相应的文件,即使缓冲区没有更改也是如此。

在这两种情况下,缓冲区的内容都将保存到磁盘。显然结果是一样的,那么为什么要麻烦,对吗?但是,请稍等...两者之间存在细微但不相关的差异。

如果您通过退出Vim :x且缓冲区没有变化,则该文件的修改时间将不变。另一方面,如果您通过退出:wq,则修改时间将改变,因为该文件在技术上已被重写(再次保存)。

在某些情况下这可能会产生一些影响。例如,依赖于修改时间的备份过程可以存储该文件(并可能通过网络发送该文件),即使未包含其他信息也是如此。否则,如果某些监视过程检测到文件已更改,则可能会发出警报...

编辑:我忘了提一下,为了保留修改后的缓冲区/文件而不更改修改时间,一个:q(不带w)也可以使用。


2
另外,某些自动命令仅在写入文件时运行。如果文件没有更改并且Vim用ZZ或:x退出,它们将不会运行。
Spidey
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.