Ответ 1
Это сохраняет буфер при изменении текста. (Vim 7.4)
autocmd TextChanged,TextChangedI <buffer> silent write
Я не хочу знать, почему вы не должны автоматически сохранять или есть файл подкачки и т.д. или по какой-либо причине, чтобы не автосохранять.
Я просто хочу автоматически сохранить текущий рабочий файл, чтобы сохранить его каждые 1 секунду в vim.
Как я могу это достичь?
Это сохраняет буфер при изменении текста. (Vim 7.4)
autocmd TextChanged,TextChangedI <buffer> silent write
Когда вы начнете читать файл, установите переменную буфера на текущее время:
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
Затем, чтобы reset сохранить время явно:
au BufWritePre * let b:save_time = localtime()
Я не тестировал выше на vim 7.0 и новее. Кроме того, событие CursorHold вряд ли будет достаточным для такого небольшого периода автоматического сохранения (он также не срабатывает при записи) - возможно, вы также должны вызвать UpdateFile()
в CursorMoved.
Кроме того, рассмотрите возможность использования файлов подкачки. По умолчанию файл подкачки записывается после ввода 200 символов или 4 секунды бездействия. Восстановление от swap довольно простое и, возможно, более надежное, если что-то пойдет не так.
vim-workspace плагин имеет довольно настраиваемую функцию автоматического сохранения, которая может удовлетворить ваши потребности (с помощью autoread, чтобы вы получили последний выигрыш от записи поведение). Вы можете настроить его всегда автосохранение (по умолчанию оно только автосохраняется в сеансе рабочей области) и соответственно установите ваше обновление.
let g:workspace_autosave_always = 1
updatetime=1000