Vim: eliminar automáticamente el archivo SWP después de la recuperación no cambia el archivo original

Vim: eliminar automáticamente el archivo SWP después de la recuperación no cambia el archivo original

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 :epara 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 -rlos 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 DiffOrigcomando 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 :xcomando. Si no, descarto los cambios recuperados saliendo con :q!. Si el archivo de recuperación no está asociado con un archivo guardado, por ejemplo, .swpnormalmente uso :w filenamepara guardar el búfer recuperado en un archivo con un nombre de archivo.

Ayudante de DiffOrig

Agregué elDiffOrigcomando a my .vimrcpara 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 -iopción requiere confirmación ( y) para eliminar el archivo. Si tiene más confianza y desea acelerar el proceso, puede omitir esto.

información relacionada