我不想知道为什么你不应该自动保存,或者有交换文件等或者无法自动保存的原因。
我只想自动保存当前工作文件,以便在vim中每1秒保存一次。
我怎样才能做到这一点?
答案 0 :(得分:33)
每当文本发生变化时,都会保存缓冲区。 (Vim 7.4)
autocmd TextChanged,TextChangedI <buffer> silent write
答案 1 :(得分:9)
当您开始阅读文件时,请将缓冲区变量设置为当前时间:
au BufRead,BufNewFile * let b:save_time = localtime()
设置一个事件以检查自上次保存以来是否已经过了足够的时间,如果没有则更新:
au CursorHold * call UpdateFile()
设置自动保存期限,以秒为单位:
let g:autosave_time = 1
定义一个功能,以便在需要时保存文件:
" save if needed / update the save_time after the save
function! UpdateFile()
if((localtime() - b:save_time) >= g:autosave_time)
update
let b:save_time = localtime()
else
" just debugging info
echo "[+] ". (localtime() - b:save_time) ." seconds have elapsed so far."
endif
endfunction
然后,明确重置保存时间:
au BufWritePre * let b:save_time = localtime()
我没有在vim 7.0及更高版本上测试过上述内容。此外,CursorHold事件不太可能足够用于这么小的自动保存期(在录制时也不会触发) - 也许你也应该在CursorMoved上调用UpdateFile()
。
另外,请考虑使用交换文件。默认情况下,在输入200个字符或4秒不活动后,交换文件将被写入。如果出现问题,从交换中恢复非常简单,可能更可靠。
答案 2 :(得分:2)
使用与 Coc.nvim 兼容的:
autocmd InsertLeave * if &readonly==0 && filereadable(bufname('%')) \
| silent update | endif
接受的答案将导致自动完成失败。
和平。
答案 3 :(得分:1)
vim-workspace插件具有可定制的自动保存功能,可以满足您的需求(使用自动注册功能,因此您可以获得最后一位作者获胜行为)。 您可以将其设置为始终自动保存(默认情况下,它仅在工作区会话中自动保存)并相应地设置更新时间。
let g:workspace_autosave_always = 1
updatetime=1000