Comment puis-je me débarrasser des avertissements ennuyeux lorsque j'ouvre un fichier contenant un fichier .swp? Ou, comment ne pas générer les fichiers .swp? Exemple d'avertissement:
E325: ATTENTION
Found a swap file by the name ".notes.swp"
owned by: james dated: Fri Dec 3 17:38:07 2010
file name: ~james/school/se/project-dir/rottencucumber/doc/notes
modified: no
user name: james Host name: james-laptop
process ID: 2251 (still running)
While opening file "notes"
dated: Fri Dec 3 18:46:10 2010
NEWER than swap file!
(1) Another program may be editing the same file.
If this is the case, be careful not to end up with two
different instances of the same file when making changes.
Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r notes"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file ".notes.swp"
to avoid this message.
Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
Ce message est en fait assez important si vous vous souciez de ne perdez pas le texte que vous n'avez potentiellement pas sauvegardé. Cela devrait pas être considéré comme agaçant, et devrait ne pas vous obliger à supprimer à la hâte le fichier d'échange ou à configurer vim
pour qu'il s'exécute sans lui.
Tout fichier que vous éditez avec vim
aura un fichier d'échange correspondant pendant que vous éditez , que vim
utilise pour suivre les modifications. Lorsque vous quittez l'édition d'un fichier, vim
supprimera automatiquement le fichier d'échange correspondant. Par conséquent, l'existence d'un fichier d'échange et votre tentative d'écriture par-dessus le fichier d'origine doivent être prises en compte et une action appropriée doit être entreprise.
Les deux scénarios présentés dans le message (E325: ATTENTION Found a swap file
) sont en fait assez courants: (1) soit un autre programme vim
édite le même fichier que vous essayez éditer (il pourrait en fait s'agir d'une autre personne - auquel cas il vraiment n'aurait pas de sens de supprimer aveuglément le fichier d'échange - ou il pourrait s'agir de vous dans une autre fenêtre de terminal ou onglet), ou (2) une précédente session vim
s'est écrasée (cela se produit le plus souvent lorsque vous éditez à distance et que la session réseau est coupée - en Dans ce cas, la session vim n'a pas été fermée normalement et le fichier .swp
reste en place (un autre exemple de ce second scénario est la fermeture accidentelle de la fenêtre du terminal ou de l'onglet comportant une session active ou en arrière-plan vim
).
Lorsque je rencontre ce message, je commence par réfléchir à la question de savoir si je modifie ce fichier dans une autre fenêtre de terminal ou un autre onglet, car je travaille normalement avec plusieurs fenêtres de terminaux avec plusieurs onglets:
Si je me rends compte que je suis en train d’éditer ailleurs, et que je peux y revenir , j’appuie sur la touche q
pour (Q)uit
cette session supplémentaire, puis je reviens à l’édition via la session vim
originale. .
Parfois, si je ne suis pas tout à fait sûr, je (Q)uit
, puis je exécute jobs
pour vérifier si j’exécute vim
dans le même terminal; si rien ne se présente, je lance ps -ef | grep vim
pour vérifier si j’utilise vim
ailleurs (c’est-à-dire dans une autre fenêtre de terminal ou un autre onglet). Le fait est que j'essaie toujours de reprendre l'édition via la session vim
d'origine.
Si je suis certain de ne pouvoir revenir à la session d’édition initiale et que les options suivantes me sont encore proposées, j’appuie sur r
pour (R)ecover
.
Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
En appuyant sur r
, vous verrez un message comme celui-ci:
Swap file ".notes.swp" already exists!
"notes" 18L, 46C
Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.
Press ENTER or type command to continue
Si, en revanche, je ne suis plus confronté à ces options, car je suis à l'invite du shell, j'exécute vim
avec l'option -r
, comme suit:
vim -r notes
Le message résultant sera similaire:
Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.
Press ENTER or type command to continue
Dans tous les cas, appuyez sur ENTER
pour continuer et vous verrez votre fichier.
Note: Si Vim a des doutes sur ce qu'il a trouvé, il va donner un message d'erreur et insérer des lignes avec "???" dans le texte. Si vous voyez un message d'erreur pendant la récupération, recherchez dans le fichier "???" pour voir ce qui ne va pas. Vous voudrez peut-être couper et coller pour obtenir le texte dont vous avez besoin.
La remarque la plus courante est "??? LINES MISSING". Cela signifie que Vim ne peut pas lire le texte du fichier d'origine. Cela peut se produire si le système est tombé en panne et que des parties du fichier d'origine n'ont pas été enregistrées.
Cela dit, je n’ai jamais vu ces marques ???
; il doit donc s'agir d’une véritable occurrence rare .
Ensuite, enregistrez (c’est-à-dire écrivez) le contenu dans un autre fichier (en général, j’ajoute simplement "2" à la fin du nom de fichier original):
:w notes2
Ensuite, forcez-vous à quitter cette session vim
:
:q!
Ensuite, comparez les deux fichiers:
diff notes notes2
Si la diff
ne renvoie rien , cela signifie qu'il n'y a pas de différence et qu'il est prudent de supprimer le fichier d'échange et le second fichier:
rm .notes.swp notes2
A ce stade, ouvrez le fichier d'origine et procédez comme s'il n'y avait jamais eu de problème:
vim notes
Si la diff
renvoie quelque chose , cela signifie que le fichier d'origine (via le fichier d'échange) comportait des modifications qui, grâce à la récupération, ont été enregistrées à la seconde. fichier.
Puisque ces modifications sont capturées dans le deuxième fichier, vous pouvez supprimer le fichier d'échange et remplacer le fichier d'origine par le deuxième:
rm .notes.swp
remove .notes.swp? y
mv notes2 notes
overwrite notes? (y/n [n]) y
A ce stade, ouvrez le fichier d'origine et procédez comme s'il n'y avait jamais eu de problème:
vim notes
Cela semble beaucoup de travail, mais une fois que vous vous êtes habitué au flux de travail, cela prend environ 20 secondes maximum.
Le message collé suggère que le fichier "notes" est toujours ouvert dans une autre session Vim. Ce n'est certainement pas une bonne idée de modifier un fichier en cours de modification ailleurs.
Si ce message est incorrect, vous devez déterminer comment votre session Vim s'est terminée de manière incorrecte et éviter cela à l'avenir.
Pour ce qui est de la récupération, cela peut être un problème dans cette instance car "notes" est plus récent que le fichier Vim .swp qui lui est associé, mais vous pouvez toujours essayer. Assurez-vous simplement de copier d'abord votre fichier "notes" dans un emplacement de sauvegarde.
Ce serait une bonne idée de lire ":help recover.txt
".
La leçon à tirer ici est que vous n'êtes pas censé voir ce message et que vous voulez dire quelque chose qui ne va pas quelque part. Ce n'est (probablement) pas la faute de Vim.
Si, à ce stade, vous êtes absolument déterminé à ne pas laisser Vim créer des fichiers .swp afin de pouvoir récupérer des crashs et autres problèmes connexes, vous pouvez insérer "set noswapfile
" dans ~/.vimrc
.
Vous pouvez utiliser -n pour ouvrir vim sans utiliser de fichier d'échange :
Pour le faire tout le temps, il suffit de mettre
alias vim='vim -n'
dans votre fichier .bashrc ou .bash_aliases
si vous avez besoin d’exécuter vim sans l’option -n, lancez simplement
\vim
vim supprimera le fichier .swp généré lorsque vous le quitterez correctement.
Comment puis-je me débarrasser des avertissements ennuyeux lorsque j'ouvre un fichier contenant un fichier .swp?
Utilisez l'option message court dans votre ~/.vimrc
:
set shortmess=A
Ce qui est également la valeur par défaut lorsque vous utilisez le mode POSIX.
Cependant, ne faites pas cela : c'est comme si vous retiriez les sacs gonflables de votre voiture pour augmenter le rendement énergétique. À long terme, vous passerez plus de temps à récupérer qu'à répondre à la question.
Cela m'est arrivé lorsque mon terminal a fermé de manière inattendue ma connexion avec vi open.
Heureusement, je n'ai perdu aucun changement.
Pour supprimer cet avertissement et ignorer le swap:
process ID: 2251 (still running)
, dans ce cas c'est 2251ps 2251
kill 2251
Et c'est tout.
N'oubliez pas que les fichiers d'échange sont là pour vous protéger et que vous ne devez pas les désactiver complètement.