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.
vim -n file_name
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.
En ce qui concerne 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 absolument déterminé à ne pas laisser Vim créer des fichiers .swp afin de pouvoir récupérer des crashs et d’autres problèmes connexes, vous pouvez insérer "
set noswapfile
" dans~/.vimrc
.la source
Vous pouvez utiliser -n pour ouvrir vim sans utiliser de fichier d'échange :
Pour le faire tout le temps, il suffit de mettre
dans votre fichier .bashrc ou .bash_aliases
si vous avez besoin d’exécuter vim sans l’option -n, lancez simplement
la source
vim supprimera le fichier .swp généré lorsque vous le quitterez correctement.
la source
Utilisez l' option message court dans votre
~/.vimrc
:Ce qui est également la valeur par défaut lorsque vous utilisez le mode POSIX.
Cependant, ne faites pas ceci : c'est comme si vous retiriez les sacs gonflables de votre voiture pour augmenter l'efficacité énergétique. À long terme, vous passerez plus de temps à récupérer qu'à répondre à la question.
la source
:e
pour voir ce qui est arrivé (y compris un rapideu
pour annuler revenir à ce que J'avais beaucoup mieux aimé cela que d'être ennuyé d'avoir déjà un fichier ouvert.Cela m'est arrivé lorsque mon terminal a fermé de manière inattendue ma connexion avec vi ouvert.
Heureusement, je n'ai perdu aucun changement.
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.
la source
vi(m)
processus?J'ai résolu ce problème en trois étapes simples:
1 :) Exécutez "ls -la" où le fichier existe afin de pouvoir afficher le fichier .swp de la même manière.
2 :) Maintenant, "rm -i * .swp" c'est-à-dire, supprimez le fichier ".swp" du répertoire.
3 :) Confirmez maintenant si le fichier ".swp" a été supprimé.
4 :) Profitez maintenant de ces avertissements.
la source
rm -rf
de supprimer un fichier? J'ai remplacé-rf
par un plus raisonnable-i