我意识到在gvim中Control+S
作为:update
命令.我总是保存使用Ctrl+S
,所以我认为这:update
是另一种说法"刷新变化".是:update
基本相同的写:w
?如果我更换:update
,我会遇到问题:w!
吗?
编辑:我想更改:update
为:w!
因为我有一个文件说"准备就绪,请添加" !
.我认为这是唯一的解决方案
jkr*_*mer 17
:help :update
非常清楚:
Like ":write", but only write when the buffer has been modified.
Run Code Online (Sandbox Code Playgroud)
因此,只有在实际更改了缓冲区的内容时才会写入文件.因此,如果你使用:update
(或在GVim中按Ctrl + S)并且缓冲区中没有未保存的更改,它将不会执行任何操作.
YaO*_*OzI 17
这是另一种解释: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
Run Code Online (Sandbox Code Playgroud)
现在,让我们VIM文件,并尝试:up
并:w
分别命令:
$ vim test.txt
Run Code Online (Sandbox Code Playgroud)
不要编辑,只需键入: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!
Run Code Online (Sandbox Code Playgroud)
如您所见,仅更改了访问时间,这是因为我们读取(访问)文件中的数据.但修改时间和更改时间仍然相同.
现在让我们再次使用vim并使用该:w
命令.
$ vim test.txt
Run Code Online (Sandbox Code Playgroud)
不要编辑,但这个时间类型: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!
Run Code Online (Sandbox Code Playgroud)
现在我们可以看到的区别:up
和:w
!该文件的修改数据和文件状态也发生了变化,虽然没有什么真正的文件中更改.
因此,为了避免这种情况,可以使用:w
命令将:up
命令映射到命令:map :w :up
.
来自帮助:
:[range]up[date][!] [++opt] [>>] [file]
Like ":write", but only write when the buffer has been
modified. {not in Vi}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4933 次 |
最近记录: |