Jak mogę odzyskać oryginalny plik z pliku .swp?


57

Próbowałem otwierania pliku swp użyciu vii catale wyświetla śmieci.


Czy używasz vi lub vim?
— frabjous

Czy to działa emacs? (lub sublime, nano, ed itp.)
— szczery

Odpowiedzi:


94
vim -r .swp

To przechodzi w tryb odzyskiwania i daje więcej informacji. Myślę, że tego właśnie chcesz.

.swX-file są pozostawione, jeśli sesja z niezapisanym plikiem zostanie zabita / ulega awarii / dzieje się coś złego. Są one również obecne w czasie, gdy niezapisany bufor jest otwarty w sesji Vima. vim -rczyta te pliki tymczasowe i odtwarza zawartość. Po odzyskaniu po prostu zapisz go jak zwykle, np :w newfilename.


8
Właśnie tego szukałem. Dla każdego innego, w ten sposób odzyskujesz niezapisane pliki. Powyższe metody działają dobrze, jeśli plik już istnieje, ale nie można otworzyć pliku bez nazwy.
— Eric Hu

17

Nie musisz mieć oryginalnego pliku, aby odzyskać .swp. Po prostu otwórz plik, jakby istniał. vim wyszuka plik z rozszerzeniem .swp i zaoferuje jego odzyskanie.

na przykład:

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

Wystarczy nacisnąć R, aby go odzyskać i: wq plik

Edycja: Zauważ, że plik .swp zawiera tylko zmiany dokonane w pliku (patrz komentarz). Oznacza to, że będziesz musiał pobrać najnowszą kopię pliku z kopii zapasowej, a następnie użyć vima, aby odzyskać najnowsze zmiany. Jeśli nie masz kopii zapasowej pliku, naprawdę nie masz szczęścia.


2
Na pewno musisz mieć oryginalny plik, bez niego dane w pliku .swp są bezużyteczne. Zobacz „: plik wymiany pomocy”. Są sytuacje, w których może się wydawać, że działa bez oryginalnego pliku, ale plik .swp przechowuje tylko informacje o zmianach i wymaga pewnego punktu początkowego do zastosowania tych informacji podczas odzyskiwania.
— Heptyt

Oczywiście masz rację. Właściwie to nie wiedziałem o Vimie. Jest to jednak logiczne, ponieważ przechowywanie pełnej kopii oryginalnego pliku byłoby ogromną stratą. Odpowiedź brzmi: odzyskaj plik z kopii zapasowej, a następnie użyj vima, aby odzyskać najnowsze modyfikacje.
— Vegar Westerlund,

Przechowywanie całego pliku w jednym pliku SWP byłoby marnotrawstwem, tak, ale widzę potencjalną wartość w gromadzeniu plików SWP (jeśli jest włączone). Z tego samego powodu, który edytujesz przez diff i łatasz oryginał tylko przy wyraźnym zapisie, ma to dla mnie sens jeśli potrafisz zainscenizować sekwencję różnic, wygeneruj częściową sumę (daty przed dzisiaj -> co noc; co noc + dziś = prąd) itp. Znalazłem „: pre [służyć] w manuelu, myślę, że to działa w ten sposób. W każdym razie najważniejszą linią jest:The original file is no longer needed for recovery.
— John P

Wygląda na to, że działa - :preservei :set cpoptions=...&pozostawia pliki .swp i .swo w katalogu i oferuje możliwość odzyskania z obu tych plików. Za pomocą vim -r <file>możesz wybrać pomiędzy .swp i .swo. Dalsze edycje generują .swn, .swm itp., Które wydają się być częściową sumą swapów do tego momentu. Możesz powrócić do wybranej wersji i edytować (~ = widelec) lub zapisać (~ = skrytka). W końcu możesz spakować pliki wymiany, demonizować ich kopie zapasowe itp. Mogę się mylić co do szczegółów, jeśli chodzi o większe pliki - nie jestem pewien, jak to wpływa na dodatkowe pliki wymiany - patrz poniżej.
— John P

(Ciąg dalszy) - bufor przenosi flagi i jest to bufor, który wytwarza pliki wymiany, więc nawet jeśli flagi nie są ustawione z konfiguracji globalnej lub automatycznego ładowania, są one dziedziczone podczas samego odzyskiwania. Aby zastąpić sekwencję odzyskiwania jednym plikiem odzyskiwania, możesz przenieść swap, który chcesz .swp i ukryć resztę. Chciałbym dowiedzieć się więcej o nakładaniu się odzyskiwania plików i zarządzania sesjami Vima, jeśli ktoś może wypełnić luki.
— John P


7

1 Otwórz plik wymiany .file.swpwvim

2 :recoverodzyska twój plik


7

Po przeczytaniu komentarzy Vegar Westerlund i Heptite chciałem wiedzieć, w którym momencie vim potrzebuje oryginalnego pliku (lub kopii zapasowej) do odzyskania z pliku .swp. Oto, co zrobił:

Otworzyłem plik 975 linii, edytowałem go w linii 949 (tworząc .swpplik) i zabiłem proces, a następnie usunąłem oryginał. $ vim Original_Filezapytał, czy chcę odzyskać z .swp »> tak; tylko pierwsze 68 linii i ostatnie 34 linie (zaczynając 8 linii powyżej mojej edycji) zostały odzyskane.

Następnie powtórzyłem test z mniejszymi plikami: od 20 do 200 wierszy plik .swp zawierał 100% oryginalnej zawartości. Ale przy 300 liniach tylko pierwsze 68 i 18 ostatnich linii (zaczynając 2 linie powyżej mojej edycji) zostały uwzględnione w .swp.

Podsumowując, dobrze jest wiedzieć, że vim zawsze zapisuje „nagłówek” i „dół” pliku w plikach .swp. Może jest ustawienie kontrolujące, ile wierszy powinien zawierać .swp?

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.