Ce message est en fait assez important si vous vous souciez de ne pas perdre de texte que vous n'avez potentiellement pas sauvegardé. Cela ne devrait pas être considéré comme agaçant et ne devrait pas vous amener à supprimer à la hâte le fichier d'échange ni à configurer vim
son exécution.
Tout fichier que vous éditez avec vim
vous un fichier d'échange correspondant lorsque vous modifiez , qui vim
utilise pour garder une trace des changements. Lorsque vous quittez l'édition d'un fichier, vim
le fichier d'échange correspondant est automatiquement ignoré. Par conséquent, l'existence d'un fichier d'échange et votre tentative d'écriture sur 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 commun: (1) soit un autre vim
programme édite le même fichier que vous essayez de modifier (il pourrait en fait être une autre personne - auquel cas il vraiment ne serait pas logique supprimer aveuglément le fichier d'échange - ou cela pourrait être vous dans une autre fenêtre ou un autre onglet du terminal), ou (2) une vim
session précédente s'est bloquée (le plus souvent, cela se produit lorsque vous éditez à distance et que la session réseau est coupée - dans lequel Si la session vim n’est pas sortie normalement et que le .swp
fichier reste en place, un autre exemple de ce second scénario est la fermeture accidentelle de la fenêtre ou de l’onglet du terminal contenant une vim
session active ou en arrière-plan .
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 q
touche de (Q)uit
cette session supplémentaire et je reviens à l’édition via la vim
session d’ origine .
Parfois , si je ne suis pas tout à fait sûr, je (Q)uit
puis courir jobs
pour vérifier si je suis en cours d' exécution vim
dans le terminal exactement le même; si rien ne se présente, je cours ps -ef | grep vim
pour vérifier si je cours vim
ailleurs (par exemple dans une autre fenêtre de terminal ou un autre onglet). Le fait est que j'essaie toujours de reprendre l'édition via la vim
session d' origine .
Si je suis certain de ne pas 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, je lance vim
avec l' -r
option, 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 arriver 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, alors cela doit être un événement vraiment rare .
Ensuite, sauvegardez (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 vim
session:
:q!
Ensuite, comparez les deux fichiers:
diff notes notes2
Si le diff
résultat 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 deuxième 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 le diff
retourne quelque chose , cela signifie que le fichier d'origine (via le fichier d'échange) contient des modifications qui, grâce à la restauration, ont été enregistrées dans le second fichier.
Puisque ces modifications sont capturées dans le second fichier, vous pouvez supprimer le fichier d'échange et remplacer le fichier d'origine par le second:
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.