Wie kann ich die Originaldatei aus einer .swp-Datei wiederherstellen?


57

Ich habe versucht , das Öffnen der .swp - Datei viund catzeigt aber Junk.


Benutzt du vi oder vim?
Frabjous

Funktioniert das mit emacs? (oder erhaben, nano, ed, etc.)
Frank

Antworten:


94
vim -r .swp

Dies geht in den Wiederherstellungsmodus und gibt Ihnen weitere Informationen. Ich denke das ist was du willst.

.swX-Dateien bleiben zurück, wenn eine Sitzung mit einer nicht gespeicherten Datei beendet wird / abstürzt / etwas anderes Schlimmes passiert. Sie sind auch während der Zeit vorhanden, in der ein nicht gespeicherter Puffer in einer Vim-Sitzung geöffnet ist. vim -rLiest diese temporären Dateien und erstellt den Inhalt neu. Nachdem Sie es wiederhergestellt haben, speichern Sie es einfach wie gewohnt, z :w newfilename.


8
Genau das, wonach ich gesucht habe. Für alle anderen ist dies die Methode, mit der Sie noch nicht gespeicherte Dateien wiederherstellen können. Die oben genannten Methoden funktionieren einwandfrei, wenn bereits eine Datei vorhanden ist, Sie jedoch keine Datei ohne Namen öffnen können.
Eric Hu

17

Sie benötigen nicht die Originaldatei, um die .swp-Datei wiederherzustellen. Öffnen Sie einfach die Datei, als ob sie existiert. vim sucht nach der Datei mit der Erweiterung .swp und bietet an, sie wiederherzustellen.

z.B:

$ 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:

Drücken Sie einfach R, um es wiederherzustellen und: wq die Datei

Bearbeiten: Beachten Sie, dass die .swp-Datei nur die Änderungen enthält, die an der Datei vorgenommen wurden (siehe Kommentar). Dies bedeutet, dass Sie eine aktuelle Kopie der Datei aus der Sicherung abrufen und dann mit vim die neuesten Änderungen wiederherstellen müssen. Wenn Sie keine Sicherungskopie der Datei haben, haben Sie wirklich Pech.


2
Sie müssen auf jeden Fall die Originaldatei haben, ohne sie sind die Daten in der .swp-Datei unbrauchbar. Siehe ": help swap-file". Es gibt Situationen, in denen es scheint, als würde es ohne die Originaldatei funktionieren, aber die SWP-Datei speichert nur Änderungsinformationen und benötigt einen Ausgangspunkt, um diese Informationen während der Wiederherstellung anzuwenden.
Heptite

Sie haben natürlich recht. Ich wusste das eigentlich nicht über vim. Es ist jedoch nur logisch, eine vollständige Kopie der Originaldatei zu speichern, da dies eine enorme Verschwendung wäre. Dann lautet die Antwort: Stellen Sie Ihre Datei aus dem Backup wieder her und verwenden Sie dann vim, um die neuesten Änderungen wiederherzustellen.
Vegar Westerlund

Das Speichern der gesamten Datei in einem einzigen swp wäre zwar verschwenderisch, aber ich sehe einen potenziellen Wert darin, swp-Dateien anzusammeln (sofern aktiviert). Aus demselben Grund bearbeiten Sie das Original über diff und patchen es nur beim expliziten Speichern. Das ist für mich sinnvoll Wenn Sie eine Sequenz von Diffs inszenieren könnten, eine Teilsumme generieren könnten (Daten vor dem heutigen Tag -> nächtlich; nächtlich + heute = aktuell) usw. Ich habe festgestellt, dass ": pre [serve]" im Handbuch so funktioniert. In jedem Fall ist die wichtigste Zeile:The original file is no longer needed for recovery.
John P

Sieht so aus, als ob es funktioniert - :preserveund :set cpoptions=...&belässt eine SWP- und eine SWO-Datei im Verzeichnis und bietet die Wiederherstellung von beiden an. Mit vim -r <file>können Sie zwischen .swp und .swo wählen. Weitere Bearbeitungen erzeugen .swn, .swm usw., die anscheinend die Teilsumme der bis zu diesem Zeitpunkt getauschten Änderungen sind. Sie können auf die Version zurückgreifen, die Ihnen gefällt, und sie bearbeiten (~ = Fork) oder speichern (~ = Stash). Schließlich können Sie die Auslagerungsdateien tarieren, ihre Sicherungen dämonisieren usw. Ich könnte mich in Bezug auf die Details bei größeren Dateien irren - ich bin mir nicht sicher, wie sich dies auf die zusätzlichen Auslagerungsdateien auswirkt - siehe unten.
John P

(Fortsetzung) - Der Puffer enthält die Flags und es ist der Puffer, der die Auslagerungsdateien erzeugt. Selbst wenn die Flags nicht aus der globalen Konfiguration oder dem automatischen Laden stammen, werden sie während der Wiederherstellung selbst vererbt. Um eine Wiederherstellungssequenz durch eine einzelne Wiederherstellungsdatei zu ersetzen, können Sie den Swap, den Sie als SWP-Datei verwenden möchten, verschieben und den Rest ausblenden. Ich würde gerne mehr über die Überlappung zwischen Dateiwiederherstellung und Vim-Sitzungsverwaltung erfahren, wenn jemand die Lücken füllen kann.
John P


7

1 Öffnen Sie die Auslagerungsdatei .file.swpinvim

2 :recoverwird Ihre Datei wiederherstellen


7

Nachdem ich die Kommentare von Vegar Westerlund und Heptite gelesen hatte, wollte ich wissen, an welchem ​​Punkt vim die Originaldatei (oder eine Sicherungskopie) benötigt, um von einer SWP-Datei wiederherzustellen. Folgendes hat getan:

Ich habe eine 975-Zeilen-Datei geöffnet, in Zeile 949 bearbeitet (eine .swpDatei erstellt), den Vorgang abgebrochen und dann das Original gelöscht. $ vim Original_Filefragte, ob ich mich von der .swp erholen wollte »> yes; Nur die ersten 68 Zeilen und die letzten 34 Zeilen (beginnend mit 8 Zeilen oberhalb meiner Bearbeitung) wurden tatsächlich wiederhergestellt.

Ich habe den Test dann mit kleineren Dateien wiederholt: Von 20 bis 200 Zeilen enthielt die .swp-Datei 100% des ursprünglichen Inhalts. Bei 300 Zeilen waren jedoch nur die ersten 68 und die letzten 18 Zeilen (beginnend mit 2 Zeilen über meiner Bearbeitung) in der SWP-Datei enthalten.

Als Fazit ist es gut zu wissen, dass vim immer die "Header" und "Bottom" der Datei in den .swp-Dateien speichert. Vielleicht gibt es eine Einstellung, um zu steuern, wie viele Zeilen eine .swp-Datei enthalten soll?

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.