Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在vim中每1秒自动保存一个文件?_Vim_Autosave - Fatal编程技术网

如何在vim中每1秒自动保存一个文件?

如何在vim中每1秒自动保存一个文件?,vim,autosave,Vim,Autosave,我不想知道为什么你不应该自动保存或有交换文件等或任何原因不自动保存 我只是想在vim中每隔1秒自动保存当前工作文件 如何实现这一点?开始读取文件时,请将缓冲区变量设置为当前时间: au BufRead,BufNewFile * let b:save_time = localtime() 设置一个事件以检查自上次保存以来是否经过了足够的时间,如果没有,则进行更新: au CursorHold * call UpdateFile() 设置自动保存周期,以秒为单位: let g:autosave_

我不想知道为什么你不应该自动保存或有交换文件等或任何原因不自动保存

我只是想在vim中每隔1秒自动保存当前工作文件


如何实现这一点?

开始读取文件时,请将缓冲区变量设置为当前时间:

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秒后,将写入交换文件。从交换中恢复非常简单,而且可能更可靠,以防出现问题。

这会在文本更改时保存缓冲区。(Vim 7.4)


autocmd TextChanged,TextChangedI silent write

该插件有一个可定制的自动保存功能,可以满足您的需要(具有自动读取功能,因此您可以获得最后一个writer wins行为)。 您可以将其设置为“始终自动保存”(默认情况下,它仅在工作区会话中自动保存),并相应地设置更新时间

let g:workspace_autosave_always = 1
updatetime=1000
对于2021年的读者,您正在使用CoC.nvim插件 使用与Coc.nvim兼容的:

autocmd InsertLeave * if &readonly==0 && filereadable(bufname('%')) \
                       | silent update | endif
接受的答案将导致自动完成失败


Peace.

似乎该功能已计划用于下一版本的Vim(在Vim 7.3上
:help autosave
显示自
todo.txt
)。目前,我认为没有合适的autocmd/event来编写vimscript以每秒执行save。但是Michael提出的解决方案应该适用于大多数情况,因为即使它在光标未移动时不执行保存,也不太可能在不移动光标的情况下执行任何更改,内置的autosave功能仍然列在未来版本中要添加的改进项下。尽情享受优雅和简单!工作很轻松![需要在他的
\u vimrc
中加入这一点]这并不能真正解决所提出的问题,但它似乎是一个很好的替代品。这可以标记为解决方案吗?
autocmd TextChanged,TextChangedI*静默写入
适用于任何缓冲区。对于2021读者:如果您也使用Coc.nvim,请阅读我的答案。我是Vim专家。