Vim - supprimer automatiquement le fichier SWP après la récupération ne modifie pas le fichier d'origine

8

Lorsque le processus Vim est interrompu de manière abrupte (par exemple, un crash système), il laisse un fichier SWP. L'ouverture ultérieure du fichier d'origine dans Vim offre l'option de récupération. La plupart du temps, le fichier récupéré est identique au fichier enregistré, car j'ai l'habitude d'enregistrer souvent. Alors Vim dit:

Recovery completed. Buffer contents equals file contents. 
You may want to delete the .swp file now.

Bien sûr, je veux supprimer le fichier .swp maintenant!

Comment puis-je faire en sorte que Vim supprime toujours automatiquement le fichier SWP dans ce cas?

Il semble n'y avoir aucun paramètre intégré pour faire cela, alors je cherche un événement d'autocommande approprié.

Une façon que j'ai trouvée est de :e # après le message, ce qui provoque la réapparition des options swap-exist, je peux alors "le supprimer". Mais je ne devrais pas vraiment avoir à faire ces étapes supplémentaires à chaque fois.

Evgeni Sergeev
la source
Merci! J'ai trouvé votre :e # Le truc est, bien que pas idéal, mais toujours plus utile que la réponse actuelle ci-dessous. :-)
RayLuo

Réponses:

5

Remarque: vous n’avez pas indiqué le système d’exploitation que vous utilisez. Ce qui suit fonctionne avec un shell Unix, mais si vous utilisez Windows, vous pouvez télécharger un Cygwin simple ou un autre shell.

Je faisais la même chose que toi, cours :e pour rouvrir le même fichier pour pouvoir supprimer le fichier de récupération. Après un crash ou un redémarrage inattendu de l'ordinateur, je nettoie tous les fichiers de récupération Vim restants en exécutant vim -r sur les fichiers d'échange et en laissant la récupération se poursuivre.

Quand les fichiers ont ne pas modifié

Si les fichiers n’ont pas changé, je souhaite supprimer le fichier de récupération immédiatement. Ce serait bien que Vim puisse le faire automatiquement, mais malheureusement, ce n’est pas le cas.

Quand les fichiers ont changé

Si les fichiers ont changé, je lance le DiffOrig commande pour comparer les différences entre les versions d'origine et récupérées. Si je suis satisfait des modifications apportées au fichier de récupération, je quitte en enregistrant les fichiers avec le :x commander. Sinon, je rejette les modifications récupérées en quittant avec :q!. Si le fichier de récupération n’est pas associé à un fichier enregistré, par exemple, .swp, J'utilise habituellement le :w filename pour enregistrer le tampon récupéré dans un fichier avec un nom de fichier.

Assistant DiffOrig

J'ai ajouté le DiffOrig commande à mon .vimrc afin qu’il soit toujours disponible.

command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis

Script shell

J'exécute le script suivant dans mon shell pour rechercher chaque fichier d'échange dans l'arborescence de répertoires actuelle. Chaque fichier d'échange est ensuite utilisé pour ouvrir Vim dans "mode de récupération" et est ensuite supprimé après la fermeture de Vim.

find . -type f -name '.*.sw?' -exec vim -r "{}" -c DiffOrig \; -exec rm -iv "{}" \;

le rm -i Cette option nécessite une confirmation ( y ) pour supprimer le fichier. Si vous êtes plus confiant et souhaitez accélérer le processus, vous pouvez l'omettre.

Anthony Geoghegan
la source