我在gvim Control+S
中意识到:update
命令。我总是使用Ctrl+S
保存,因此我认为:update
是另一种说法“刷新更改”。 :update
与写:w
基本相同吗?如果我为:update
替换:w!
,我会遇到问题吗?
编辑:我想将:update
更改为:w!
,因为我有一个文件说“只准备就绪,请添加!
”。我认为这是唯一的解决方案
答案 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”类似,但只在缓冲区被修改时写入。