什么';Vim中:update和:w之间的区别是什么?

什么';Vim中:update和:w之间的区别是什么?,vim,Vim,我意识到在gvimControl+S中,作为:update命令。我总是使用Ctrl+S保存,因此我假设:update是“刷新更改”的另一种说法。:update与write:w基本相同吗?如果我为:w更换:update,我会有问题吗 编辑:我想将:更新更改为:w因为我有一个文件,上面写着“仅准备就绪,请添加!”,我认为这是帮助中唯一的解决方案: :[range]up[date][!] [++opt] [>>] [file] Like ":

我意识到在gvim
Control+S
中,作为
:update
命令。我总是使用
Ctrl+S
保存,因此我假设
:update
是“刷新更改”的另一种说法。
:update
与write
:w
基本相同吗?如果我为
:w更换
:update
,我会有问题吗

编辑:我想将
:更新
更改为
:w因为我有一个文件,上面写着“仅准备就绪,请添加
”,我认为这是帮助中唯一的解决方案:

:[range]up[date][!] [++opt] [>>] [file]
                        Like ":write", but only write when the buffer has been
                        modified.  {not in Vi}

:帮助:更新
说明:

如“:write”,但仅在修改缓冲区时写入


:help:update
非常清楚:

Like ":write", but only write when the buffer has been modified.

因此,仅当缓冲区的内容已实际更改时,才会写入该文件。因此,如果您使用
:update
(或在GVim中按Ctrl+S)并且缓冲区中没有未保存的更改,它将不会做任何事情。

下面是另一种解释
之间区别的方法:write
(快捷方式
:w
)和
:update
(快捷方式
:up
):

无论何时键入
:w
,VIM都会将缓冲区写入文件,无论缓冲区是否为空。意味着它会将文件的时间戳更新为键入的时间
:w
,即使文件的内容没有实际更改

使用
:up
,正如vim帮助手册所述,vim仅在文件更改时更新时间戳


例如,当我打开一个文件只是为了阅读,但我可能会意外地(或习惯性地)键入
:w
:wq
,如果我确实关心文件的时间戳(即上次修改的时间),那么就没有回头路了。以下示例(在BASH shell中)显示了这些效果:

$ touch test.txt
$
$ stat test.txt
      File: `test.txt'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828498    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-15 22:30:52.159258193 +0800
Modify: 2014-03-15 22:30:52.159258193 +0800
Change: 2014-03-15 22:30:52.159258193 +0800

现在让我们对该文件进行VIM,并分别尝试使用
:up
:w
命令:

$ vim test.txt
不要编辑,只需键入
:up
,然后键入
:q

$ stat test.txt
  File: `test.txt'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828498    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-15 22:33:10.002269244 +0800  <--- Different!
Modify: 2014-03-15 22:30:52.159258193 +0800  <--- Didn't Change!
Change: 2014-03-15 22:30:52.159258193 +0800  <--- Didn't Change!
$ stat test.txt
  File: `test.txt'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828538    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-15 22:40:26.728239153 +0800  <--- Different Again!
Modify: 2014-03-15 22:40:26.728239153 +0800  <--- Changed!
Change: 2014-03-15 22:40:26.728239153 +0800  <--- Changed!
不编辑,但此时间键入
:w
,然后键入
:q

$ stat test.txt
  File: `test.txt'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828498    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-15 22:33:10.002269244 +0800  <--- Different!
Modify: 2014-03-15 22:30:52.159258193 +0800  <--- Didn't Change!
Change: 2014-03-15 22:30:52.159258193 +0800  <--- Didn't Change!
$ stat test.txt
  File: `test.txt'
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 811h/2065d  Inode: 98828538    Links: 1
Access: (0664/-rw-rw-r--)  Uid: (  514/    rank)   Gid: (  514/    rank)
Access: 2014-03-15 22:40:26.728239153 +0800  <--- Different Again!
Modify: 2014-03-15 22:40:26.728239153 +0800  <--- Changed!
Change: 2014-03-15 22:40:26.728239153 +0800  <--- Changed!
$stat test.txt
文件:`test.txt'
大小:0块:0 IO块:4096常规空文件
设备:811h/2065d索引节点:98828538链接:1
访问:(0664/-rw-rw-r--)Uid:(514/秩)Gid:(514/秩)

访问:2014-03-15 22:40:26.728239153+0800您可以使用bang(
)和update命令。我总是忘记使用
:help
,结果导致堆栈溢出。在这个答案中强调它是有帮助的。是否有一个仅使用
:q
无法实现的
:up
用例?因为您也可以通过退出
:q
,将vim转换为文件,避免更改修改/更改值,前提是您将vim转换为文件仅用于读取,而不进行任何更改。