Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

vim

autosave

I don't want to know about why you should 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?

like image 603
user537488 Avatar asked Aug 09 '11 05:08

user537488


2 Answers

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

autocmd TextChanged,TextChangedI <buffer> silent write

like image 149
Sameer Avatar answered Oct 12 '22 02:10

Sameer


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.

like image 33
Michael Foukarakis Avatar answered Oct 12 '22 03:10

Michael Foukarakis