Comment puis-je récupérer le fichier d'origine à partir d'un fichier .swp?

57

J'ai essayé d'ouvrir le fichier .swp en utilisant viet catmais il affiche des bric-à-brac.

zarna
la source
Utilisez-vous vi ou vim?
frabjous
Est-ce que ça marche avec emacs? (ou sublime, nano, ed, etc.)
franc

Réponses:

94
vim -r .swp

Cela passe en mode de récupération et vous donne plus d'informations. Je pense que c'est ce que tu veux.

.swX-files sont laissés derrière si une session avec un fichier non enregistré est tué / se bloque / quelque chose de mauvais se produit. Ils sont également présents lorsqu'une mémoire tampon non enregistrée est ouverte dans une session Vim. vim -rlit ces fichiers temporaires et recrée le contenu. Après l'avoir récupéré, sauvegardez-le comme d'habitude, par exemple :w newfilename.

Daniel Andersson
la source
8
Précisément ce que je cherchais. Pour quiconque, voici comment vous récupérez des fichiers non encore sauvegardés . Les méthodes ci-dessus fonctionnent correctement si un fichier existe déjà, mais vous ne pouvez pas ouvrir un fichier sans nom.
Eric Hu
17

Vous n'avez pas besoin du fichier d'origine pour récupérer le .swp. Ouvrez simplement le fichier comme s'il existait. vim recherchera le fichier avec l’extension .swp et lui proposera de le récupérer.

par exemple:

$ ls -a
. .. .test.txt.swp
$ vim test.txt
[...]
Swap file ".test.txt.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:

Appuyez simplement sur R pour le récupérer et: wq le fichier

Edit: Notez que le fichier .swp ne contient que les modifications apportées au fichier (voir le commentaire). Cela signifie que vous devrez récupérer une copie récente du fichier depuis la sauvegarde, puis utiliser vim pour récupérer les dernières modifications. Si vous ne possédez pas de copie de sauvegarde du fichier, vous n’avez vraiment pas de chance.

Vegar Westerlund
la source
2
Vous devez absolument avoir le fichier original, sans lui, les données du fichier .swp sont inutiles. Voir ": fichier d'échange d'aide". Dans certaines situations, il peut sembler fonctionner sans le fichier d'origine, mais le fichier .swp ne stocke que les informations de modification et nécessite un point de départ pour appliquer ces informations lors de la récupération.
Heptite
Vous avez raison, bien sûr. En fait, je ne le savais pas à propos de vim. Mais il n’est que logique que de stocker une copie complète du fichier original serait un énorme gaspillage. La réponse est alors: récupérez votre fichier à partir de la sauvegarde, puis utilisez vim pour récupérer les dernières modifications.
Vegar Westerlund
Stocker l'intégralité du fichier dans un seul swp serait une perte de temps, oui, mais je vois une valeur potentielle à accumuler des fichiers swp (lorsqu'il est activé). Pour la même raison, vous éditez via diff et corrigez l'original uniquement lors d'une sauvegarde explicite, cela me semble sensé si vous pouviez mettre en scène une séquence de diffs, générer une somme partielle (dates antérieures à aujourd'hui -> nuit; nuit + aujourd'hui = actuelle) etc. J'ai trouvé ': pres [serve] `dans le manuel, je pense que cela fonctionne de cette façon. Dans tous les cas, la ligne la plus importante est la suivante:The original file is no longer needed for recovery.
John P
On dirait que cela fonctionne - :preserveet :set cpoptions=...&laisse un fichier .swp et .swo dans le répertoire et propose de récupérer l'un ou l'autre. En utilisant, vim -r <file>vous pouvez choisir entre .swp et .swo. Les éditions ultérieures génèrent .swn, .swm, etc., qui semblent correspondre à la somme partielle des échanges jusqu’à ce point. Vous pouvez revenir à la version de votre choix et l’éditer (~ = fork) ou enregistrer (~ = stash). Finalement, vous pouvez tarer les fichiers d'échange, démoniser leurs sauvegardes, etc. Je peux me tromper sur les détails en ce qui concerne les fichiers plus volumineux - je ne suis pas sûr de savoir comment cela affecte les fichiers d'échange supplémentaires non plus - voir ci-dessous.
John P
(Suite) - le tampon porte les indicateurs et c'est le tampon qui produit les fichiers d'échange. Par conséquent, même si les indicateurs ne sont pas définis à partir de la configuration globale ou du chargement automatique, ils sont hérités lors de la récupération elle-même. Pour remplacer une séquence de récupération par un seul fichier de récupération, vous pouvez déplacer le fichier d'échange vers .swp et masquer le reste. J'aimerais en savoir plus sur le chevauchement entre la récupération de fichier et la gestion de session Vim si quelqu'un peut combler les lacunes.
John P
7

Ouvrez le fichier d'origine à l'aide de vim et choisissez l'option de récupération.

Ignacio Vazquez-Abrams
la source
Je n'ai pas le fichier d'origine. J'ai juste c'est '.swp'
zarna
1
C'est moins important que vous ne le pensez. Ouvrez-le quand même.
Ignacio Vazquez-Abrams
7

1 Ouvrez le fichier d'échange .file.swpdansvim

2 :recoverva récupérer votre fichier

Sathyam
la source
7

Après avoir lu les commentaires de Vegar Westerlund et Heptite, je voulais savoir à quel moment vim avait besoin du fichier d'origine (ou d'une sauvegarde) pour récupérer à partir d'un fichier .swp. Voici ce qui a fait:

J'ai ouvert un fichier 975 lignes, il édité en ligne 949 (création d' un .swpfichier) et tué le processus, puis supprimé l'original. $ vim Original_Filedemandé si je voulais récupérer du .swp »> oui; seules les 68 premières lignes et les 34 dernières lignes (8 lignes au-dessus de ma modification) ont été récupérées.

J'ai ensuite répété le test avec des fichiers plus petits: de 20 à 200 lignes, le fichier .swp contenait 100% du contenu d' origine . Mais à 300 lignes, seules les 68 premières et les 18 dernières lignes (les 2 premières lignes au-dessus de mon édition) ont été incluses dans le .swp.

En conclusion, il est bon de savoir que vim enregistre toujours "l'en-tête" et le "fond" du fichier dans les fichiers .swp. Peut-être existe-t-il un paramètre permettant de contrôler le nombre de lignes qu'un fichier .swp doit contenir?

tuk0z
la source