2011-08-09 23 views

Respuesta

9

Al iniciar la lectura de un archivo, defina una variable de memoria intermedia a la hora actual:

au BufRead,BufNewFile * let b:save_time = localtime() 

Establecer un evento para comprobar si ha transcurrido suficiente tiempo desde la última parada de actualización no si:

au CursorHold * call UpdateFile() 

establecer el período de almacenamiento automático, en cuestión de segundos:

let g:autosave_time = 1 

definir una función para guardar el archivo si 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 

Entonces, para poner a cero el tiempo de guardar explícitamente:

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 activa cuando se graba); tal vez también deberías llamar al UpdateFile() en CursorMoved.

Además, considere el uso de 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.

+3

Parece que esta característica ya está prevista para las próximas versiones de Vim (en Vim 7.3 ': help autosave' muestra de' todo.txt'). Por el momento, creo que no hay ningún autocmd/evento adecuado para escribir un vimscript para realizar guardar por cada segundo. Pero la solución propuesta por Michael debería funcionar para la mayoría de los casos, porque incluso si no realiza salvaciones cuando el cursor no se mueve, no es muy probable que realice ningún cambio sin mover el cursor. – mMontu

+0

http://vim.wikia.com/wiki/Auto-save_current_buffer_periodically –

+2

En vim 7.4, la función de autoguardado incorporada aún se incluye en la lista de mejoras para agregar en futuras versiones. –

23

Esto guarda el búfer cada vez que se cambia el texto. (Vim 7,4)

autocmd TextChanged,TextChangedI <buffer> silent write

+1

¡Acumula elegancia y simplicidad! ¡Funcionó como una brisa! [Uno necesita poner esto en su '_vimrc'.] – llinfeng

1

El plugin vim-workspace tiene un guardado automático característica bastante personalizable que pueden satisfacer sus necesidades (con AutoRead para que pueda obtener último escritor gana el comportamiento). Puede configurarlo para guardar automáticamente de forma automática (de forma predeterminada, solo se guarda automáticamente cuando está en una sesión del área de trabajo) y establecer el tiempo de actualización en consecuencia.

let g:workspace_autosave_always = 1 
updatetime=1000 
Cuestiones relacionadas