Vim: elimina automáticamente el archivo SWP después de que la recuperación no cambie el archivo original

9

Cuando el proceso Vim se termina abruptamente (por ejemplo, bloqueo 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 a menudo. 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 integrada para hacer esto, por lo que estoy buscando un evento de autocomando apropiado.

Una forma que encontré es :e #después del mensaje, lo que hace que las opciones de intercambio aparezcan nuevamente, luego puedo "Eliminarlo". Pero realmente no debería tener que hacer esos pasos adicionales cada vez.

Evgeni Sergeev
fuente
¡Gracias! Descubrí que tu :e #truco es, aunque no ideal, pero aún más útil que la respuesta actual a continuación. :-)
RayLuo

Respuestas:

5

Nota: no ha dicho qué sistema operativo está utilizando. Lo siguiente funciona con un shell de Unix, pero si ejecuta Windows, puede descargar un Cygwin básico o algún otro shell.

Solía ​​hacer lo mismo que usted, ejecutar :epara volver a abrir el mismo archivo para obtener la opción de eliminar el archivo de recuperación. Después de un bloqueo o reinicio inesperado de la computadora, limpio todos los archivos de recuperación de Vim restantes ejecutándolos vim -ren los archivos de intercambio y dejando que continúe la recuperación.

Cuando los archivos no han cambiado

Si los archivos no han cambiado, quiero eliminar el archivo de recuperación de inmediato. Sería genial si Vim pudiera hacer esto automáticamente, pero desafortunadamente no lo hace.

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 al salir con :q!. Si el archivo de recuperación no está asociado con un archivo guardado, por ejemplo, .swpgeneralmente uso el :w filenamepara guardar el búfer recuperado en un archivo con un nombre de archivo.

DiffOrig ayudante

He añadido el DiffOrig comando para mi .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 directorios actual. Cada archivo de intercambio se utiliza 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, esto puede omitirse.

Anthony Geoghegan
fuente