在 vim 中编辑后保存文件

10
我经常在vim中这样做:[在插入或普通模式下进行某些操作],Esc,:ws。
我每天要做上百次这样的操作。相反,我想改掉这个习惯,并让vim在对缓冲区进行任何更改后立即保存到文件中。
所有东西都在SSD上运行,所以我不认为性能会成为一个问题。
4个回答

16

在你的~/.vimrc中添加这个简单的映射:

inoremap <Esc> <Esc>:w<CR>

插入模式下,每次按下<Esc>键时自动将当前缓冲区写入。


5
现在想起来似乎很明显,但只解决了问题的一半。你可以在不进入插入模式的情况下编辑缓冲区。 - Nick Zalutskiy
2
你可能更喜欢使用“autocmd InsertLeave * update”而不是映射。 - exic

6
CursorHoldCursorHoldI可能会有所帮助。根据文档所述:
|CursorHold|        the user doesn't press a key for a while
|CursorHoldI|       the user doesn't press a key for a while in Insert mode

这些事件仅在不活动后触发一次,并且取决于updatetime变量(默认值:4000ms)。因此,您可以:

:au CursorHold <buffer> :update

在普通模式下,如果有4秒钟没有操作,则会更新当前缓冲文件(即仅在修改过的情况下保存)。

如果您希望在插入模式下获得相同的行为,请为CursorHoldI添加自动命令。


3
我不知道除了编程之外还有什么其他方法可以实现你所要求的内容(可以查看VIM Wiki作为起点)。为了恢复目的,VIM的交换文件几乎可以实现你所要求的功能。
VIM手册中得知:

在输入200个字符或者四秒钟内没有输入时,会更新交换文件

这似乎可以解决大部分问题。你是否有某些特定的问题需要避免?

我想每次更改代码时都运行syntastic(默认情况下,只有在保存时才运行),并且我不想经常手动保存,因为这个习惯很烦人。我不喜欢交换文件,因为它们会污染我的工作目录。我想每隔1秒钟左右自动保存一次,但似乎这样做没有必要。 - Nick Zalutskiy

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接