Когда вы начинаете читать файл, установите переменную буфера на текущее время:
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 вряд ли будет достаточно для такого небольшого периода автосохранения (оно также не срабатывает при записи) - возможно, вам следует также вызвать UpdateFile()
для CursorMoved.
Также рассмотрите возможность использования файлов подкачки. По умолчанию файл подкачки записывается после 200 введенных символов или 4 секунд бездействия. Восстановление из свопа довольно простое и, возможно, более надежное на случай, если что-то пойдет не так.