![vim - 高效地自动保存文件到磁盘](https://linux22.com/image/1396254/vim%20-%20%E9%AB%98%E6%95%88%E5%9C%B0%E8%87%AA%E5%8A%A8%E4%BF%9D%E5%AD%98%E6%96%87%E4%BB%B6%E5%88%B0%E7%A3%81%E7%9B%98.png)
我保留一个日志文件,并希望将其写入磁盘,而不必在每次编辑后手动保存。
我使用过:au! CursorHoldI,CursorHold <buffer> silent! :update
在某处找到的命令,效果很好,而且很高效:默认情况下,在光标位于同一位置 4 秒后,'updatetime'
它会将文件写入磁盘(仅当发生更改时,因此:update
不是)。:write
插入和普通的模式。(当缓冲区在 Vim 中具有焦点时。无论 Vim 是否具有焦点,这是一个微妙的点。也就是说,如果 Vim 失去焦点,文件仍然会在 4 秒后保存。)
唯一的问题是,如果我用 打开另一个文件:split
,然后单击 或Ctrl+ W,k则原始文件在 ms 之后不会保存'updatetime'
。如何纠正这个问题?
答案1
一个解决方案是添加BufLeave
事件,并发出如下命令:
:au! CursorHoldI,CursorHold,BufLeave <buffer> silent! :update
在我的.vimrc
(又名_vimrc
)中,我定义了
noremap <C-S-F5> :au! CursorHoldI,CursorHold,BufLeave <buffer> silent! :update<CR>
因此我在该缓冲区中按下++Ctrl使其进入自动保存模式。ShiftF5
注意:silent
不会打印任何消息,也silent!
不会打印任何错误,并忽略它们。这适用于没有关联文件的缓冲区和只读文件。
答案2
该:wall
命令(通常缩写为:wa
)与 一样,:update
仅在文件保存时才写入文件。不同之处在于,它将写入所有打开的文件,而不仅仅是当前文件。
您可以使用相同的自动命令,只需代替:wa
即可:update
。