web-dev-qa-db-fra.com

Comment se débarrasser des avertissements lors de l'ouverture d'un fichier contenant un fichier .swp?

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:
43
James

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:

enter image description here

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.

41
user664833

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.

19
Heptite

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
10
Brad Parks

vim supprimera le fichier .swp généré lorsque vous le quitterez correctement.

2

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.

1
bishop

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:

  1. Trouvez l'ID de processus en regardant process ID: 2251 (still running), dans ce cas c'est 2251
  2. Vérifiez que vous avez le bon identifiant ps 2251
  3. Tuez le processus en utilisant 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.

1
kintsukuroi