这里有另一种解释
: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!
正如您所看到的,只有访问时间改变了,这是因为我们读取(访问)文件中的数据。但修改时间和更改时间仍然相同。
现在让我们再次使用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
之间的区别!文件的数据已经被修改且文件状态也已更改,尽管文件中实际上没有什么变化。
为了避免这种情况,我们可以使用
:map :w :up
将
:w
命令映射到
:up
命令。
!
)。 - ZyX