tutorial - insertar texto vim
¿Cómo guardar automáticamente un archivo cada 1 segundo en vim? (3)
Cuando empiece a leer un archivo, establezca una variable de almacenamiento intermedio a la hora actual:
au BufRead,BufNewFile * let b:save_time = localtime()
Establezca un evento para verificar si ha transcurrido el tiempo suficiente desde la última vez que guardó y actualice si no es así:
au CursorHold * call UpdateFile()
Establezca el período de guardado automático, en segundos:
let g:autosave_time = 1
Defina una función para guardar el archivo si es necesario:
" 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
Luego, para restablecer el tiempo de ahorro de forma explícita:
au BufWritePre * let b:save_time = localtime()
No he probado lo anterior en vim 7.0 y posterior. Además, es poco probable que el evento CursorHold sea suficiente para un período de guardado automático tan pequeño (tampoco se desencadena al grabar); tal vez también deba llamar a UpdateFile()
en CursorMoved.
Además, considere usar archivos de intercambio. Por defecto, un archivo de intercambio se escribe después de 200 caracteres escritos o 4 segundos de inactividad. La recuperación del intercambio es bastante simple y tal vez más confiable, en caso de que algo salga mal.
No quiero saber por qué no debe guardar automáticamente o hay un archivo de intercambio, etc. o el motivo que sea para no guardar automáticamente.
Simplemente quiero guardar automáticamente el archivo de trabajo actual para guardar cada 1 segundo en vim.
¿Cómo puedo conseguir esto?
El plugin vim-workspace tiene una función de guardado automático bastante personalizable que puede adaptarse a sus necesidades (con auto-lectura para que el último escritor gane el comportamiento). Puede configurarlo para que siempre se guarde automáticamente (de forma predeterminada, solo se guarda automáticamente mientras está en una sesión del área de trabajo) y configure su tiempo de actualización en consecuencia.
let g:workspace_autosave_always = 1
updatetime=1000
Esto guarda el búfer cada vez que se cambia el texto. (Vim 7.4)
autocmd TextChanged,TextChangedI <buffer> silent write