132 votes

Quel est le moyen le plus simple de supprimer les fichiers d'échange de Vim que j'ai déjà récupérés ?

Parfois, Vim se plante et me laisse un fichier d'échange. C'est génial. Ensuite, j'ouvre le fichier que j'étais en train d'éditer et Vim me demande si je veux récupérer. Je le fais, merci. Quand c'est fait, Vim me dit ,

You may want to delete the .swp file now.

Pourquoi, oui, je le fais. Comment je fais ça ? Je pensais que le système utiliserait à nouveau l'ancien fichier d'échange comme fichier d'échange et le nettoierait lorsque je quitterais, mais ce n'est pas le cas. Il en crée un nouveau, le nettoie, et quand j'ouvre à nouveau le fichier, il me demande à nouveau de récupérer le premier.

Je rate sûrement quelque chose.

114voto

miyalys Points 2065

Une méthode un peu plus simple

Depuis l'émulateur de terminal :

$ vim filename

Ensuite, dans vim, choisissez récupérer et si vous voulez supprimer l'échange, vous pouvez écrire (sauvegarder) et ensuite appeler cette commande :

:e          // no argument needed. It assumes the current buffer.

...et choisir supprimer cette fois-ci.

Un avantage de cette approche est qu'elle n'écrase pas automatiquement un fichier de travail, si la récupération s'est avérée corrompue (bien que j'admette que cela ne s'est jamais produit auparavant).

Il existe également des conseils pertinents sur cette question sur Stack Overflow (où j'ai trouvé cette astuce).

61voto

Shwaydogg Points 669

Pour nettoyer TOUS les fichiers de swap de vim dans un répertoire :

Si vous êtes sûr de ne pas avoir besoin de fichiers d'échange vim dans une arborescence de répertoires et que vous voulez vous en débarrasser, vous pouvez utiliser la commande suivante dans le répertoire où se trouve vim no en cours d'exécution (même pas dans une autre fenêtre ou même dans une session de connexion différente) :

find . -type f -name "*.sw[klmnop]" -delete

Certaines inspirations et réflexions sont venues de Suppression des fichiers .swp inutiles à Google Groups.  Cela supprimera tous les fichiers dont le nom se termine par .swk , .swl , .swm , .swn , .swo ou .swp dans l'arborescence du répertoire courant.

Ce n'est peut-être pas ce que vous souhaitez, pour plusieurs raisons :

  • Comme indiqué, elle recherche dans le répertoire courant arbre ; c'est-à-dire le répertoire courant et tous les sous-répertoires, de manière récursive.  Cela va au-delà de ce que la question demande, et peut être considéré comme une surcharge de travail.

  • Comme indiqué, il va supprimer tous les fichiers dont le nom se termine par .swk , .swl , .swm , .swn , .swo ou .swp , et pas seulement .swpGary Johnson dit ,

    En outre, tous les fichiers d'échange ne se terminent pas par .swp.  Si Vim doit créer un fichier swap et qu'un fichier se terminant par .swp existe déjà, Vim utilisera l'extension l'extension .swo pour le nouveau fichier et .swn après cela.  Je pense qu'il Je pense que cela continue à l'envers dans l'alphabet.  Donc en utilisant quelque chose comme

      \*.sw[nop] 

    ou même

      \*.sw? 

    serait plus approfondie.

    L'auteur original de este Le poste dit,

    "klmnop" est peut-être un peu exagéré, mais cela me permet généralement de les recevoir tous.

  • D'un autre côté, ça pourrait être insuffisant.  rouble suggère

    find . -type f \( -name ".*.s[a-v][a-z]" -o -name ".*.sw[a-p]" \) -delete

    qui correspond à toutes les extensions à trois lettres (minuscules) allant de .saa a .swp .  Il ajoute : "Attention toutefois, même si cette solution est plus complète, elle supprimera tous les fichiers d'image .svg et les fichiers adobe flash .swf.  Vous voudrez peut-être modifier l'expression rationnelle si vous travaillez avec ces fichiers."  Elle correspond également à .sav , .snd (données sonores), .sql , .src , .srt (format de sous-titres vidéo SubRip), et de nombreuses autres extensions courantes.

  • C'est peut-être exagéré.  Comme indiqué, cela va supprimer tous les fichiers dont le nom se termine par .swk , .swl , .swm , .swn , .swo ou .swp .  Mais, apparemment, les fichiers d'échange de vim sont généralement des fichiers "point".  Si vous éditez hello.cpp , le fichier d'échange pourrait être **.**hello.cpp.swp .  Comme indiqué (mais non expliqué) dans réponse de rouble , il est plus sûr de ne supprimer que les fichiers dont le nom commence par un point ; par exemple, avec

    find . -type f -name ".*.sw[klmnop]" -delete

22voto

Wolfy Points 309

Type ls -a qui liste TOUS les fichiers du répertoire

type rm .whatever.your.swp est et appuyez sur enter

C'est aussi simple que cela.

Tout fichier qui apparaît avec . devant est un fichier caché et n'est normalement pas vu.

N'oubliez pas que les changements sont immédiats et permanents, alors soyez prudent.

8voto

bernibra Points 41

En fait, certains plugins le font automatiquement pour vous : autoswap.vim

de la description :

  1. Le fichier est-il déjà ouvert dans une autre session Vim, dans une autre fenêtre ?
  2. Si c'est le cas, passez à la fenêtre où nous modifions ce fichier.
  3. Sinon, si le fichier d'échange est plus ancien que le fichier lui-même, il suffit de s'en débarrasser.
  4. Sinon, ouvrez le fichier en lecture seule pour que nous puissions y jeter un coup d'œil et éventuellement le sauvegarder.

7voto

Avio Points 841

Non, AFAIK vous ne manquez rien. Vim continue à conserver le fichier d'échange comme sauvegarde jusqu'à ce que vous le supprimiez explicitement.

Il suffit d'enregistrer, de quitter et de rouvrir le même fichier. Vous serez invité (de nouveau) à

[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort, (D)elete it

Maintenant, il suffit d'appuyer sur d :)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X