Когда вы начинаете читать файл, установите переменную буфера на текущее время:
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 секунд бездействия. Восстановление из свопа довольно простое и, может быть, более надежное, если что-то пойдет не так.
person
Michael Foukarakis
schedule
09.08.2011