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.

3voto

Oli Comber Points 31

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

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

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

2voto

Dmitrii Points 290

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

2voto

nate Points 121

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

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 est confronté à la situation, on peut exécuter :DeleteFileSwaps C'est génial si on le combine avec :windo o :tabdo des commandes.

:tabdo DeleteFileSwaps 

Plus de détails : Un fichier peut avoir plus d'un fichier d'échange. La raison en est que le fichier swap, dont l'extension est .swp existent toujours et vim continuera à créer de nouvelles grâce à lui. Pour savoir si .swp existent :

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

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

J'espère que cela vous aidera.

1voto

rouble Points 674

Voici une expression rationnelle plus complète pour nettoyer tous les fichiers d'échange de vim, basée 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 toutefois, bien que cette solution soit plus complète, elle supprimera tous les fichiers d'image .svg et les fichiers flash .swf d'Adobe. Si vous travaillez avec ces fichiers, vous devrez peut-être modifier l'expression rationnelle.

0voto

joharr Points 275

Extrait du manuel :h swap :

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

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