有什么区别:更新和:Vim中的w?

时间:2010-06-22 12:11:26

标签: vim

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

编辑:我想将:update更改为:w!,因为我有一个文件说“只准备就绪,请添加!”。我认为这是唯一的解决方案

4 个答案:

答案 0 :(得分:16)

:help :update非常清楚:

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

因此,只有在实际更改了缓冲区的内容时才会写入文件。因此,如果你使用:update(或在GVim中按Ctrl + S)并且缓冲区中没有未保存的更改,它将不会执行任何操作。

答案 1 :(得分:14)

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

每当我们输入:w时,无论缓冲区是否为空,VIM都会将缓冲区写入文件。 MEANs 它会将文件的时间戳更新为: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!

如您所见,仅更改了访问时间,这是因为我们读取(访问)文件中的数据。但修改时间&amp;改变时间仍然是一样的。


现在再次使用vim并使用 :w 命令。

$ vim test.txt

不要编辑,但这次输入 :w ,然后输入:q

$ 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!

现在我们可以看到:up:w之间的区别!该文件的数据已修改,文件状态也已更改,但文件中没有任何真正更改。


为避免这种情况,可以使用:w:up命令映射到:map :w :up命令。

答案 2 :(得分:4)

来自帮助:

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

答案 3 :(得分:2)

:help :update说:

  

与“:write”类似,但只在缓冲区被修改时写入。