Parfois, Vim se bloque et me laisse un fichier d'échange. C'est génial. Ensuite, j'ouvre le fichier que je modifiais et Vim me demande si je veux récupérer. Oui, merci. Quand c'est fini, Vim me dit:
You may want to delete the .swp file now.
Pourquoi, oui, je le fais. Comment je fais ça? Je pensais qu'il commencerait simplement à utiliser l'ancien fichier d'échange comme fichier d'échange à nouveau et à le nettoyer lorsque j'arrêterai de fumer, mais ce n'est pas vrai. Il en crée un nouveau, le nettoie et lorsque je rouvre le fichier, il me demande à nouveau de récupérer le premier.
Sûrement je manque quelque chose.
Une manière un peu plus simple:
Depuis l'émulateur de terminal:
vim filename
Ensuite, choisissez récupérez, et si vous voulez supprimer le swap, vous écrivez (enregistrez), puis faites-le dans vim:
:e // no argument needed. It assumes the current buffer.
... et choisissez supprimer cette fois.
Je viens de découvrir ça, et je pense que je vais le faire à partir de maintenant. Ensuite, je ne remplacerai pas accidentellement un fichier de travail non plus, si la récupération s'est avérée corrompue (bien que je ne l'aie jamais essayé auparavant).
Il existe également des astuces pertinentes sur cette question sur Stack Overflow (où j'ai trouvé cette astuce).
Si vous êtes certain de ne pas avoir besoin de fichiers d'échange vim dans une arborescence de répertoires et souhaitez vous en débarrasser, vous pouvez utiliser la commande suivante dans le répertoire lorsque vim est pas en cours d'exécution (même dans un autre dossier). fenêtre ou même une session de connexion différente):
find . -type f -name "*.sw[klmnop]" -delete
Suppression des fichiers .spwp indésirables sur Google Groupes. Ceci supprimera tous les fichiers dont le nom se termine par .swk
, .swl
, .swm
, .swn
, .swo
ou .swp
dans l'arborescence de répertoires actuelle.
Cela peut ne pas être ce que vous voulez, pour plusieurs raisons:
Comme indiqué, tous les fichiers dont le nom se termine par .swk
, .swl
, .swm
, .swn
, .swo
ou .swp
et non seulement .swp
seront supprimés. Gary Johnson dit ,
En outre, tous les fichiers d'échange ne se terminent pas par .swp. Si Vim doit créer un fichier d'échange et que celui-ci se terminant par .swp existe déjà, il utilisera l'extension .swo pour le nouveau fichier, puis .swn. Je pense que cela continue simplement à l'envers dans l'alphabet. Donc, en utilisant quelque chose commeL'auteur original de this post dit:\*.sw[nop]
ou même
\*.sw?
serait plus approfondi.
'klmnop' est peut-être exagéré, mais cela garantit généralement que je les ai tous.
D'autre part, il pourrait être moins performant. roublesuggère
find . -type f \( -name ".*.s[a-v][a-z]" -o -name ".*.sw[a-p]" \) -delete
qui correspond à toutes les extensions de trois lettres (minuscules) allant de .saa
à .swp
. Il ajoute: «Soyez prudent, même s’il s’agit d’une solution plus complète, elle supprimera tous les fichiers image .svg et les fichiers flash Adobe .swf. Vous voudrez peut-être modifier la regex si vous travaillez avec ces fichiers. ”Il correspond également à .sav
, .snd
(données audio), .sql
, .src
, .srt
(format de sous-titre vidéo SubRip) et à de nombreuses autres extensions courantes.
C'est peut-être exagéré. Comme indiqué, tous les fichiers dont le nom se termine par .swk
, .swl
, .swm
, .swn
, .swo
ou .swp
seront supprimés. Mais, apparemment, les fichiers d'échange vim sont généralement des fichiers «pointés». Si vous éditez hello.cpp
, le fichier d'échange peut être .hello.cpp.swp
. Comme indiqué (mais non expliqué) dans réponse de rouble , il est préférable de ne supprimer que les fichiers dont le nom commence par un point; par exemple, avec
find . -type f -name ".*.sw[klmnop]" -delete
Tapez ls -a
qui liste TOUS les fichiers du répertoire
tapez rm .whatever.your.swp
is et appuyez sur enter
C'est si simple.
Tout fichier affiché avec .
devant est un fichier caché et n’est normalement pas vu.
Rappelez-vous que les changements sont immédiats et permanents, soyez donc prudent.
Btw. certains plugins le font automatiquement pour vous: autoswap.vim
d'après la description:
- Le fichier est-il déjà ouvert dans une autre session Vim dans une autre fenêtre?
- Si tel est le cas, basculez vers la fenêtre dans laquelle nous modifions ce fichier.
- Sinon, si fichier d'échange est plus ancien que le fichier lui-même, éliminez-le simplement.
- Sinon, ouvrez le fichier en lecture seule afin que nous puissions l'examiner et le sauvegarder.
Non, autant que je sache, rien ne manque. Vim
continue de conserver le fichier d'échange comme sauvegarde jusqu'à ce que vous le supprimiez explicitement.
Enregistrez, quittez et rouvrez le même fichier. Vous serez invité (à nouveau) avec
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort, (D)elete it
Maintenant, appuyez simplement sur d
:)
Vim, comme la plupart des commandes Unix, est simple et explicite, plutôt que supposé et implicite.
Vous récupérez avec (r). Si vous n'aimez pas la récupération ou si la récupération est corrompue, vous pouvez la rejeter. Si vous 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 ne sera pas correct pour 100% des situations.
Donc, vous (r) ecover, (w) rite et (q) uit, puis éditez à nouveau et choisissez (d) elete ou "rm .myfile.js.swp" et éditez à nouveau. Du point de vue de Vim, cela est rapide et constitue toujours un comportement correct à 100%.
Ces fichiers étaient gênants pour moi aussi, mais j’ai défini l’option dans .vimrc - set noswapfile
pour empêcher vim de le créer et, au lieu de cela, de conserver les fichiers en mémoire.
Voici un regex plus complet 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, bien qu’il s’agisse d’une solution plus complète, elle supprimera tous les fichiers image .svg et les fichiers .swf Adobe Flash. Vous voudrez peut-être modifier l'expression régulière si vous travaillez avec ces fichiers.
Voici un extrait de code à ajouter dans .vimrc
. Il supprime tous les fichiers d'échange associés au tampon de fichier actuel 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 le problème rencontré, on peut exécuter :DeleteFileSwaps
. C’est formidable si on le combine avec les commandes :windo
ou :tabdo
.
:tabdo DeleteFileSwaps
Autres 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. Pour savoir si .swp
existe:
:sw
pour obtenir le fichier d'échange actuel..swp
.L'extrait ci-dessus suit le même processus, mais supprime tous les fichiers d'échange.
J'espère que cela t'aides.
si on vous le demande, appuyez sur D supprimer le fichier d'échange du fichier actuel.
si vous ne l'êtes pas, vous devez le faire manuellement.
une autre façon de faire est de:
pour localiser/rechercher un fichier:
find | grep ".searchRefineVertTabs.jsp.swp"
puis supprimez ce fichier:
rm ./.searchRefineVertTabs.jsp.swp
À partir du manuel :h swap
:
Vous pouvez voir le nom du fichier d'échange en cours d'utilisation avec la commande:
:sw[apname]