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

57

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

zarna
źródło
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.

Daniel Andersson
źródło
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.

Vegar Westerlund
źródło
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

Otwórz oryginalny plik za pomocą vima i wybierz opcję odzyskiwania.

Ignacio Vazquez-Abrams
źródło
Nie mam oryginalnego pliku. Po prostu mam plik „.swp”
zarna
1
To mniej ważne niż myślisz. Otwórz niezależnie od tego.
Ignacio Vazquez-Abrams
7

1 Otwórz plik wymiany .file.swpwvim

2 :recoverodzyska twój plik

Sathyam
źródło
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?

tuk0z
źródło