2012-09-27 14:47:47 +0000 2012-09-27 14:47:47 +0000
89
89

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

Parfois, Vim 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 le récupérer. C'est ce que je fais, merci. Quand c'est fait, Vim me dit,

You may want to delete the .swp file now.

Pourquoi, oui, je le veux. Comment je fais ? Je me suis dit qu'il suffirait de recommencer à utiliser l'ancien fichier d'échange comme fichier d'échange et de le nettoyer quand je démissionnerais, mais ce n'est pas vrai. Il en crée un nouveau, le nettoie, et lorsque j'ouvre à nouveau le fichier, il m'invite à récupérer le premier.

Il me manque sûrement quelque chose.

Réponses (12)

86
86
86
2013-12-13 12:39:26 +0000

Une manière un peu plus simple :

Depuis l'émulateur de terminal :

vim filename

…et choisissez recover, et si vous voulez supprimer l'échange, vous write (sauvegarder) et ensuite faites cela depuis vim :

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

…et choisissez delete cette fois.

Je viens de découvrir cela, et je pense que je vais le faire à partir de maintenant. Je ne vais pas non plus écraser accidentellement un fichier de travail si la récupération s'est avérée corrompue (bien que je n'aie jamais essayé cela auparavant).

Il existe également des conseils pertinents sur cette question sur le débordement de pile (où j'ai trouvé ce conseil).

40
40
40
2014-08-30 18:39:56 +0000

Pour nettoyer TOUS les fichiers d'échange 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 pendant que vim est non en cours d'exécution (même pas dans une autre fenêtre ou même une session de connexion différente) :

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

Certaines inspirations et réflexions sont venues de Suppression de la corbeille . swp at Google Groups.&nbsp ; Cela supprimera tous les fichiers dont le nom se termine par .swk, .swl, .swm, .swn, .swo, ou .swpdans l'arborescence du répertoire courant.

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

  • Comme indiqué, il recherche dans le répertoire courant tree ; c'est-à-dire le répertoire courant et tous les sous-répertoires, récursivement.&nbsp ; Cela va au-delà de ce que la question demande, et peut être considéré comme excessif.
  • Comme indiqué, il supprimera tous les fichiers dont le nom se termine par .swk, .swl, .swm, .swn, .swo, ou .swp, et pas seulement .swp. &nbsp Gary Johnson dit ,

  • D'autre part, il pourrait s'agir d'une sous-utilisation.&nbsp rouble suggère

  • Il pourrait s'agir d'une surutilisation. &nbsp ; Comme indiqué, il supprimera tous les fichiers dont le nom se termine par .swk, .swl, .swm, .swn, .swo, ou .swp.&nbsp ; Mais, apparemment, les fichiers d'échange de vim sont généralement des fichiers “point”.&nbsp ; Si vous modifiez hello.cpp, le fichier d'échange pourrait être .hello.cpp.swp.&nbsp ; Comme indiqué (mais non expliqué) dans la réponse de rouble , il est plus sûr de supprimer uniquement les fichiers dont le nom commence par un point ; par exemple, avec

14
14
14
2013-12-21 17:14:36 +0000

Tapez ls -a qui liste TOUS les fichiers dans le répertoire

tapez rm .whatever.your.swp et appuyez sur entrée

C'est aussi simple que cela.

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

Rappelez-vous que les changements sont immédiats et permanents, alors soyez prudent.

7
7
7
2015-08-04 20:27:23 +0000

Par ailleurs, certains plugins le font automatiquement pour vous : Le fichier est-il déjà ouvert dans une autre session Vim dans une autre fenêtre ?

  1. Si c'est le cas, passez à la fenêtre dans laquelle nous sommes en train d'éditer ce fichier.
  2. Autrement, si le fichier d'échange est plus ancien que le fichier lui-même, il suffit de s'en débarrasser.
  3. Sinon, ouvrez le fichier en lecture seule pour que nous puissions y jeter un coup d'œil et l'enregistrer.
6
6
6
2012-09-27 15:00:27 +0000

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

Il suffit de sauvegarder et de quitter et de rouvrir le même fichier. Vous serez invité (à nouveau) à appuyer sur

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

Il vous suffit maintenant d'appuyer sur d :)

2
2
2
2013-09-27 09:40:43 +0000

Vim, comme la plupart des commandes Unix, est simple et explicite, plutôt que présomptueux et implicite.

Vous récupérez avec ®. Si vous n'aimez pas la récupération ou si la récupération est corrompue, vous pouvez la supprimer. Si vous l'aimez, vous pouvez enregistrer le fichier. Le fichier de récupération n'est pas supprimé pour vous car cela n'est pas explicite et ne sera pas correct dans 100% des situations.

Donc vous ®ecover, (w)rite et (q)uit, puis soit vous éditez à nouveau et choisissez (d)elete ou “rm .monfichier.js.swp” et éditez à nouveau. C'est rapide et, du point de vue de Vim, c'est toujours un comportement 100% correct.

1
1
1
2017-06-18 21:48:08 +0000

Voici un extrait à ajouter dans .vimrc. Il supprime tous les fichiers d'échange qui sont associés au tampon du fichier courant et réinitialise l'extension d'échange.

function! DeleteFileSwaps()
    write
    let l:output = ''
    redir => l:output 
    silent exec ':sw' 
    redir END 
    let l:current_swap_file = substitute(l:output, '\n', '', '')
    let l:base = substitute(l:current_swap_file, '\v\.\w+$', '', '')
    let l:swap_files = split(glob(l:base.'\.s*'))
    " delete all except the current swap file
    for l:swap_file in l:swap_files
        if !empty(glob(l:swap_file)) && l:swap_file != l:current_swap_file 
            call delete(l:swap_file)
            echo "swap file removed: ".l:swap_file
        endif
    endfor
    " Reset swap file extension to `.swp`.
    set swf! | set swf!
    echo "Reset swap file extension for file: ".expand('%')
endfunction
command! DeleteFileSwaps :call DeleteFileSwaps()

Une fois que l'on rencontre la situation difficile, on peut exécuter :DeleteFileSwapsC'est très bien si on combine avec les commandes :windo ou :tabdo.

:tabdo DeleteFileSwaps

Plus de détails : Un fichier peut avoir plus d'un fichier d'échange. La raison en est que le fichier d'échange, avec l'extension .swp, existe toujours et que vim continuera à en créer de nouveaux à cause de cela. Pour savoir si .swp existe :

  • Avec le fichier cible ouvert dans vim, exécutez :sw pour obtenir le fichier d'échange actuel.
  • Vérifiez le répertoire dans lequel se trouve le fichier d'échange actuel.
  • Ensuite, vérifiez si le répertoire contient un fichier d'échange portant le nom du fichier ouvert et ayant l'extension .swp.

L'extrait ci-dessus suit le même processus, mais supprimez tous les fichiers d'échange.

J'espère que cela vous aidera.

1
1
1
2016-06-23 12:03:20 +0000

Ces fichiers étaient ennuyeux pour moi aussi, mais j'ai mis une option dans .vimrc - set noswapfile pour empêcher vim de le créer et, à la place, de garder les fichiers en mémoire.

1
1
1
2017-06-07 15:33:24 +0000

Voici une regex plus complète pour nettoyer tous les fichiers d'échange vim basés sur le propre fichier gitignore de Github pour Vim

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

Attention cependant, bien que cette solution soit plus complète, elle supprimera tous les fichiers d'image .svg et les fichiers flash .swf adobe. Vous pouvez modifier la regex si vous travaillez avec ces fichiers.

0
0
0
2015-01-26 20:03:16 +0000

Dans le manuel :h swap :

Vous pouvez voir le nom du fichier d'échange actuel utilisé avec la commande : :sw[apname]

0
0
0
2015-09-22 12:05:33 +0000

si on vous demande alors appuyez sur D pour supprimer le fichier d'échange du fichier actuel.

si vous ne le faites pas alors vous devez le faire manuellement.

une autre façon de le faire est :

pour localiser/chercher le fichier :

find | grep ".searchRefineVertTabs.jsp.swp"

et ensuite supprimer ce fichier :

rm ./.searchRefineVertTabs.jsp.swp
-1
-1
-1
2015-03-18 08:48:14 +0000

Vous pouvez utiliser,

rm -f .<filename>.<ext>.swp

Exemple :

rm -f .rc.local.swp