51 votes

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 gênants lorsque j'ouvre un fichier contenant un fichier .swp ? Ou comment ne pas générer de 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:

50voto

user664833 Points 826

Ce message est en fait très important si vous vous souciez de ne pas perdre texte que vous n'avez potentiellement pas sauvegardé. Il devrait pas être considérés comme gênants et devraient pas vous obliger à supprimer précipitamment le fichier d'échange ou à configurer vim de fonctionner sans elle.

Tout fichier que vous modifiez avec vim aura un fichier d'échange correspondant pendant que vous éditez qui vim pour suivre les changements. Lorsque vous quittez l'édition d'un fichier, vim éliminera automatiquement le fichier d'échange correspondant. Par conséquent, l'existence d'un fichier d'échange et votre tentative d'écrire par-dessus le fichier d'origine doivent être prises en considération et faire l'objet d'une action appropriée.

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 vim est en train d'éditer le même fichier que vous essayez d'éditer (il peut s'agir d'une autre personne - dans ce cas, c'est le programme realmente n'aurait pas de sens de supprimer aveuglément le fichier d'échange - ou vous pourriez être dans une autre fenêtre de terminal ou un autre onglet), ou (2) un précédent vim s'est interrompue (le plus souvent, cela se produit lorsque vous éditez à distance et que la session réseau est interrompue - dans ce cas, la session vim n'a pas été quittée normalement, et le fichier .swp reste derrière ; un autre exemple de ce deuxième scénario est que vous avez accidentellement fermé la fenêtre du terminal ou l'onglet qui avait un fichier vim session).

Lorsque je rencontre ce message, je me demande d'abord si je suis en train d'éditer ce fichier dans une autre fenêtre de terminal ou dans un autre onglet, car je travaille normalement avec plusieurs fenêtres de terminal comportant chacune plusieurs onglets :

enter image description here

Si je me rends compte que je suis en train d'éditer dans un autre endroit, et peut y revenir J'appuie ensuite sur la touche q pour (Q)uit cette session supplémentaire, et revenir à l'édition par le biais de la session d'origine. vim session.

Parfois, si je ne suis pas tout à fait sûr, je (Q)uit puis exécutez jobs pour vérifier si je suis en train d'exécuter vim dans le même terminal ; si rien ne s'affiche, je lance ps -ef | grep vim pour vérifier si je suis en cours d'exécution 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 par le biais de la fenêtre d'origine de vim session.


Si je suis certain de ne pas pouvoir revenir à la session d'édition initiale et que les options suivantes me sont toujours proposées, j'appuie sur la touche r a (R)ecover .

Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:

Appuyer sur r vous verrez apparaître 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, parce que je suis à l'invite Shell, alors j'exécute vim avec le -r comme suit :

vim -r notes

Le message qui en résultera 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.

Nota: Si Vim a des doutes sur ce qu'il a trouvé, il affichera un message d'erreur et insérera des lignes avec " ???" dans le texte. Si vous voyez un message d'erreur pendant la récupération, cherchez " ???" dans le fichier pour voir ce qui ne va pas. Il se peut que vous deviez faire un copier-coller pour obtenir le texte dont vous avez besoin.

La remarque la plus fréquente est "???LIGNES MANQUANTES". Cela signifie que Vim ne peut pas lire le texte du fichier original. Cela peut se produire si le système est tombé en panne et que des parties du fichier original n'ont pas été sauvegardées.

Cela dit, je n'ai jamais vu ces ??? Il doit donc s'agir d'un véritable rare occurrence.


Ensuite, enregistrez (c'est-à-dire écrivez) le contenu dans un autre fichier (en général, j'ajoute simplement "2" à la fin du nom du fichier original) :

:w notes2

Ensuite, quittez de force cette vim session :

:q!

Comparez ensuite les deux fichiers :

diff notes notes2

Si le diff ne renvoie rien Cela signifie qu'il n'y a pas de différence et qu'il n'y a pas de danger à supprimer le fichier d'échange et le deuxième fichier :

rm .notes.swp notes2

À ce stade, ouvrez le fichier original et procédez comme s'il n'y avait jamais eu de problème :

vim notes

Si le diff renvoie quelque chose Cela signifie que le fichier d'origine (via le fichier d'échange) a subi des modifications qui, grâce à la récupération, ont été enregistrées dans le second fichier.

Étant donné que ces modifications sont capturées dans le second fichier, vous pouvez en toute sécurité 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

À ce stade, ouvrez le fichier original et procédez comme s'il n'y avait jamais eu de problème :

vim notes

Cela semble représenter beaucoup de travail, mais une fois que l'on s'est habitué au flux de travail, cela ne prend que 20 secondes au maximum.

19voto

Patrick Klug Points 5320

Le message collé suggère que vous avez toujours le fichier "notes" ouvert dans une autre session Vim. Ce n'est certainement pas une bonne idée d'éditer un fichier qui est en cours d'édition ailleurs.

Si ce message est erroné, 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, il se peut que ce soit un problème dans ce cas précis puisque " notes " est plus récent que le fichier .swp de Vim qui lui est associé, mais vous pouvez toujours essayer. Veillez simplement à copier votre fichier "notes" dans un emplacement de sauvegarde au préalable.

Il serait judicieux de lire " :help recover.txt ".

La leçon à en tirer est que vous n'êtes pas censé voir ce message, et que vous signifiez que quelque chose a mal tourné quelque part. Ce n'est (probablement) pas la faute de Vim.

Si, à ce stade, vous êtes toujours absolument déterminé à ne pas laisser Vim créer des fichiers .swp afin de pouvoir récupérer des plantages et d'autres problèmes connexes, vous pouvez mettre " set noswapfile " dans ~/.vimrc .

12voto

Brad Parks Points 2408

Vous pouvez utiliser -n pour ouvrir vim sans utiliser de swapfile :

Pour faire cela en permanence, il suffit de mettre

alias vim='vim -n' 

dans votre fichier .bashrc ou .bash_aliases

si vous avez besoin de lancer vim sans l'option -n, lancez simplement

\vim

3voto

kintsukuroi Points 141

Cela m'est arrivé lorsque mon terminal a fermé inopinément ma connexion alors que vi était ouvert.

Heureusement, je n'ai perdu aucune modification.

Pour supprimer cet avertissement et écarter l'échange :

  1. Trouver l'identifiant du processus en regardant process ID: 2251 (still running) Dans ce cas, il s'agit de 2251
  2. Vérifier vous avez le bon identifiant ps 2251
  3. Arrêter 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.

2voto

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X