我不想知道为什么不应该自动保存或存在swap文件等任何理由来不自动保存。
我只是想在vim中每1秒钟自动保存当前工作文件。
我该如何实现这个功能?
每当文本更改时,这将保存缓冲区。(Vim 7.4)
autocmd TextChanged,TextChangedI <buffer> silent write
autocmd TextChanged,TextChangedI * silent write
适用于任何缓冲区。 - ayorgo开始读取文件时,将缓冲变量设置为当前时间:
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秒闲置后开始写入。从交换文件恢复非常简单,而且在出现问题时可能更加可靠。
:help autosave
的说明来自 todo.txt
文件)。目前我认为没有合适的自动命令/事件来编写 Vim 脚本以每秒执行保存。但是 Michael 提出的解决方案应该适用于大多数情况,因为即使在光标未移动时它不执行保存,也不太可能进行任何更改而不移动光标。 - mMontuvim-workspace 插件具有相当可定制的自动保存功能,可能适合您的需要(使用 autoread 可以获得最后编写者胜出的行为)。 您可以将其设置为始终自动保存(默认情况下,它仅在工作区会话期间自动保存),并相应地设置 updatetime。
let g:workspace_autosave_always = 1
updatetime=1000
autocmd CursorHold,CursorHoldI * update
。 - undefined