Answers:
没有内置选项,尽管:help 'autosave'
(在todo.txt中)指的是这种选项可以做什么的描述。
实现此目的的一种可能方法是使用CursorHold
自动命令事件。当用户未按下按键数'updatetime'
毫秒时触发此事件。
autocmd CursorHold * update
该:update
命令仅在修改缓冲区后保存。如果您还希望在插入模式处于活动状态时发生这种情况,CursorHoldI
可以将其添加到事件列表中。
autocmd CursorHold,CursorHoldI * update
另一个选择是该'autowrite'
选项,该选项将在执行外部命令之前保存该缓冲区(在运行前用于保存:make
)或切换到其他缓冲区。
Vim确实具有自动保存功能,但是将其保存到“恢复”文件中。
当您编辑文档时,例如MyFile.txt
vim将创建修复文件.MyFile.txt.swp
。如果您的系统崩溃了,或者会话崩溃了,那么您可以输入以下内容来重新连接并从中断的地方恢复:
vim -r MyFile.txt
这将打开文件进行编辑,并恢复您对其所做的最后更改。
然后,您可以按正常方式保存恢复的版本:w
。
不幸的是,当退出vim时,它将离开.MyFile.txt.swp
周围,您需要手动将其删除:
rm .MyFile.txt.swp
:wq
or :q!
或ZZ
or等),应该自动删除交换文件。
我制作了一个插件vim-autosave,它使用Timers的Vim 8功能来定期保存您的缓冲区。
每当失去焦点时,我都会让Vim保存一切。
autocmd FocusLost <your-patterns-here> silent! wall
我的模式很长,我在多个autocmd中使用它们,但是为了完整起见,这是这样的:
if exists(':keeppatterns')
let s:keeppatterns = 'keeppatterns '
else
let s:keeppatterns = ''
endif
augroup AutoSaveGroup
" :help file-pattern has some info,
" but some of it is is buried in the PATTERNS section of usr_40.txt
let s:autoPattern = "*.{c,h,[ch]pp,[acjt]s,inl,cg,cgfx,fx,py,bat,cmd,jam,vim,yml,yaml,vsprops,erb,rb,html,htm},SCons*,*vimrc"
autocmd!
execute "autocmd FocusLost" s:autoPattern "silent! wall"
execute "autocmd BufWritePre" s:autoPattern s:keeppatterns . 'call FixFormatting(expand("<afile>"))'
execute "autocmd FileChangedRO" s:autoPattern "silent !p4 edit %:p"
execute "autocmd FileChangedRO" s:autoPattern "write!"
autocmd FocusLost *.txt silent! wall
augroup END