¿Es posible hacer que Vim guarde automáticamente los archivos?


32

Algunos procesadores de texto y editores de texto guardan automáticamente los archivos que estamos editando de vez en cuando, lo cual es muy conveniente para sobrevivir de accidentes desagradables, etc.

¿Hay alguna manera de hacer que Vim guarde automáticamente nuestros archivos después de un intervalo específico?

Respuestas:


30

No hay una opción :help 'autosave'integrada , aunque (en todo.txt) se refiere a una descripción de lo que podría hacer esa opción.

Una posible forma de implementar esto es usar el CursorHoldevento de autocomando. Este evento se activa cuando el usuario no ha presionado una tecla durante 'updatetime'milisegundos.

autocmd CursorHold * update

El :updatecomando solo guarda el búfer si se modifica. Si también desea que esto suceda mientras el modo de inserción está activo, CursorHoldIpodría agregarlo a la lista de eventos.

autocmd CursorHold,CursorHoldI * update

Otra alternativa es la 'autowrite'opción, que guardará el búfer antes de ejecutar un comando externo (útil para guardar antes de ejecutar :make) o cambiar a un búfer diferente.


¿Cómo puedes notar si está funcionando?
nilon

@nilon Debería imprimir en la barra de estado que está guardado, como si hubiera presionado: w usted mismo.
MaudPieTheRocktorate

12

Vim tiene una función de guardado automático, pero la guarda en el archivo de "recuperación".

Cuando edita un documento, por ejemplo, MyFile.txtvim creará el archivo de revocación .MyFile.txt.swp. Si su sistema fallara, o si su sesión muriera, entonces puede volver a conectarse y recuperarse esencialmente de donde lo dejó, escribiendo:

vim -r MyFile.txt

Esto abrirá el archivo para editarlo y recuperará los últimos cambios que le hizo.

Luego puede guardar la versión recuperada de la manera normal :w.

Desafortunadamente, cuando salga de vim, dejará el .MyFile.txt.swpentorno y deberá eliminarlo manualmente:

rm .MyFile.txt.swp

Consulte la página del manual "Recuperación". También el Capítulo 11


1
Cuando salga de Vim correctamente (es decir, con :wqo :q!o ZZo etc.), los archivos de intercambio deberían eliminarse automáticamente.
Pomo de la puerta

44
@Doorknob no cuando sales después de una recuperación ... ;-)
rolfl

8

Hice un complemento vim-autosave que usa la función Vim 8 de Timers para guardar periódicamente sus buffers.


Woah, los complementos de Vim 8 ya están saliendo. ¡Se ve genial, Christian!
thameera

Gracias cristiano. Esto parece prometedor. Me pregunto si el complemento admite archivos nuevos / no guardados. No puedo encontrar la respuesta en la documentación del complemento. Mi computadora decidió reiniciar anoche y tuve varias notas rápidas sobre nuevos buffers. Vim no creó ni conservó archivos swp.
JAponte

No, actualmente no admite archivos nuevos / no guardados. Si lo desea, continúe y cree un problema whishlish.
Christian Brabandt

2

Hago que mi Vim guarde todo cada vez que se pierde el foco.

autocmd FocusLost <your-patterns-here> silent! wall

Mis patrones son bastante largos y los uso en varios autocmds, pero para completar esto es lo que parece:

if exists(':keeppatterns')
    let s:keeppatterns = 'keeppatterns '
else
    let s:keeppatterns = ''
endif

augroup AutoSaveGroup
    " :help file-pattern has some info,
    " but some of it is is buried in the PATTERNS section of usr_40.txt
    let s:autoPattern = "*.{c,h,[ch]pp,[acjt]s,inl,cg,cgfx,fx,py,bat,cmd,jam,vim,yml,yaml,vsprops,erb,rb,html,htm},SCons*,*vimrc"

    autocmd!
    execute "autocmd FocusLost"     s:autoPattern   "silent! wall"
    execute "autocmd BufWritePre"   s:autoPattern   s:keeppatterns . 'call FixFormatting(expand("<afile>"))'

    execute "autocmd FileChangedRO" s:autoPattern "silent !p4 edit %:p"
    execute "autocmd FileChangedRO" s:autoPattern "write!"

    autocmd FocusLost   *.txt   silent! wall
augroup END

1

Como otros han indicado, vim tiene un archivo de intercambio (.swp) que se creará donde sea que esté su archivo original, pero en su archivo .vimrc, puede configurar el directorio .swp.

Deberá crear el directorio con mkdiry luego configurar su .vimrc en esa ubicación.

set backup " make backup files
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp

1

El complemento vim-workspace tiene una función de guardado automático bastante personalizable que puede satisfacer sus necesidades. De forma predeterminada, habilita el guardado automático cuando está en una sesión de espacio de trabajo (su característica principal), pero puede configurarlo para que siempre guarde automáticamente si eso es todo lo que está buscando ( let g:workspace_autosave_always = 1).


1

Intente guardar el búfer cada vez que cambie el texto

autocmd TextChanged,TextChangedI <buffer> silent write

Esto funciona para mi.

Fuente

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.