
Cuando el proceso de Vim finaliza abruptamente (por ejemplo, falla del sistema), deja un archivo SWP. Abrir el archivo original en Vim más tarde ofrece la opción de recuperación. La mayoría de las veces, el archivo recuperado es el mismo que el archivo guardado, porque tengo la costumbre de guardarlo con frecuencia. Entonces Vim dice:
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.
Bueno, ¡por supuesto que quiero eliminar el archivo .swp ahora!
¿Cómo puedo hacer que Vim elimine siempre el archivo SWP automáticamente en este caso?
Parece que no hay una configuración incorporada para hacer esto, por lo que estoy buscando un evento de comando automático apropiado.
Una forma que encontré es :e #
después del mensaje, lo que hace que aparezcan nuevamente las opciones de intercambio existente, luego puedo "Eliminarlo". Pero realmente no debería tener que hacer esos pasos adicionales cada vez.
Respuesta1
Nota: no has dicho qué sistema operativo estás usando. Lo siguiente funciona con un shell Unix, pero si ejecuta Windows, puede descargar un Cygwin básico o algún otro shell.
Solía hacer lo mismo que tú, ejecutar :e
para volver a abrir el mismo archivo y tener la opción de eliminar el archivo de recuperación. Después de una falla o un reinicio inesperado de la computadora, limpio todos los archivos de recuperación de Vim remanentes ejecutando vim -r
los archivos de intercambio y dejando que la recuperación continúe.
Cuando los archivos tienennocambió
Si los archivos no han cambiado, quiero eliminar el archivo de recuperación inmediatamente. Sería fantástico si Vim pudiera hacer esto automáticamente, pero desafortunadamente no es así.
Cuando los archivos han cambiado
Si los archivos han cambiado, ejecuto el DiffOrig
comando para comparar las diferencias entre las versiones original y recuperada. Si estoy satisfecho con los cambios del archivo de recuperación, salgo guardando los archivos con el :x
comando. Si no, descarto los cambios recuperados saliendo con :q!
. Si el archivo de recuperación no está asociado con un archivo guardado, por ejemplo, .swp
normalmente uso :w filename
para guardar el búfer recuperado en un archivo con un nombre de archivo.
Ayudante de DiffOrig
Agregué elDiffOrigcomando a my .vimrc
para que esté siempre disponible.
command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis
script de shell
Ejecuto el siguiente script en mi shell para encontrar cada archivo de intercambio en el árbol de directorio actual. Luego, cada archivo de intercambio se usa para abrir Vim en"modo de recuperación"y luego se elimina después de cerrar Vim.
find . -type f -name '.*.sw?' -exec vim -r "{}" -c DiffOrig \; -exec rm -iv "{}" \;
La rm -i
opción requiere confirmación ( y
) para eliminar el archivo. Si tiene más confianza y desea acelerar el proceso, puede omitir esto.