开发者

How to auto-save a file every 1 second in vim?

I don't want to know about why you s开发者_运维知识库hould not auto-save or there is swap file etc or whatever reason to not auto-save.

I simply want to auto-save the current working file to save in every 1 second in vim.

How can I achieve this?


This saves the buffer whenever text is changed. (Vim 7.4)

autocmd TextChanged,TextChangedI <buffer> silent write


When you start reading a file, set a buffer variable to the current time:

au BufRead,BufNewFile * let b:save_time = localtime()

Set an event to check if enough time has elapsed since the last save and update if not:

au CursorHold * call UpdateFile()

Set the auto-save period, in seconds:

let g:autosave_time = 1

Define a function to save the file if needed:

" 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

Then, to reset the save time explicitly:

au BufWritePre * let b:save_time = localtime()

I have not tested the above on vim 7.0 and later. Also, the CursorHold event is unlikely to be enough for such a small auto-save period (it also doesn't trigger when recording) - maybe you should also call UpdateFile() on CursorMoved as well.

Also, consider using swap files. By default a swap file is writen to after either 200 characters typed or 4 seconds of inactivity. Recovery from swap is quite simple and maybe more reliable, in case something goes wrong.


For Readers in 2021 and You're using CoC.nvim Plugin

Use this which is compatible to Coc.nvim:

autocmd InsertLeave * if &readonly==0 && filereadable(bufname('%')) \
                       | silent update | endif

The accepted answer will cause the autocompletion fails.

Peace.


Showing some UI to prove I love (neo)Vim(-nightly): (Clickable, many others see my profile intro.)

How to auto-save a file every 1 second in vim?


The vim-workspace plugin has a fairly customizable auto-save feature that may suit your needs (with autoread so you get last writer wins behaviour). You can set it to always autosave (by default, it only autosaves while in a workspace session) and set your updatetime accordingly.

let g:workspace_autosave_always = 1
updatetime=1000
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜