¿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?

thameera
fuente

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.

jamessan
fuente
¿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

rolfl
fuente
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.

Christian Brabandt
fuente
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
dash-tom-bang
fuente
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
usuario registrado
fuente
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).

jaybay
fuente
1

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

autocmd TextChanged,TextChangedI <buffer> silent write

Esto funciona para mi.

Fuente

simhumileco
fuente