Po uruchomieniu odczyt z pliku, należy ustawić zmienną bufora do chwili obecnej:
au BufRead,BufNewFile * let b:save_time = localtime()
Ustaw imprezę, aby sprawdzić, czy na tyle czasu upłynęło od ostatniego zapisu i zmiana, jeśli nie:
au CursorHold * call UpdateFile()
Ustaw okres auto-save, w sekundach:
let g:autosave_time = 1
zdefiniować funkcję, aby zapisać plik, jeśli nee ded:
" 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
Następnie, aby wyzerować czas zapisać explicite:
au BufWritePre * let b:save_time = localtime()
nie testowałem powyższe na vim 7.0 i nowszym. Ponadto, zdarzenie CursorHold jest mało prawdopodobne, aby wystarczyło na tak mały czas automatycznego zapisywania (nie powoduje to również uruchomienia podczas nagrywania) - może powinieneś również zadzwonić pod numer UpdateFile()
również na CursorMoved.
Należy również rozważyć użycie plików wymiany. Domyślnie plik wymiany jest zapisywany po wpisaniu 200 znaków lub 4 sekund bezczynności. Odzyskiwanie z wymiany jest dość proste i może bardziej niezawodne, na wypadek gdyby coś poszło nie tak.
Wygląda na to, że ta funkcja jest już zaplanowana dla następnych wersji Vima (na Vimie 7.3 ': help autosave' wyświetla się z' todo.txt'). Na chwilę obecną uważam, że nie ma odpowiedniego autocmd/zdarzenia, aby napisać vimscript, aby wykonać save za każdą sekundę. Ale rozwiązanie zaproponowane przez Michaela powinno działać w większości przypadków, ponieważ nawet jeśli nie wykonuje zapisów, gdy kursor nie jest przesuwany, nie jest bardzo prawdopodobne, że wykonasz jakiekolwiek zmiany bez przesuwania kursora. – mMontu
http://vim.wikia.com/wiki/Auto-save_current_buffer_periodically –
W wersji 7.4, wbudowana funkcja autozapisu jest nadal wymieniona pod ulepszeniami, które zostaną dodane w przyszłych wersjach. –