Vim - automatycznie usuwa plik SWP po ​​odzyskaniu nie zmienia oryginalnego pliku

9

Gdy proces Vima zostanie nagle zakończony (np. Awaria systemu), pozostawia plik SWP. Otwarcie oryginalnego pliku w Vimie daje później możliwość odzyskania. W większości przypadków odzyskany plik jest taki sam jak zapisany plik, ponieważ często mam w zwyczaju zapisywać. Następnie Vim mówi:

Recovery completed. Buffer contents equals file contents. 
You may want to delete the .swp file now.

Oczywiście chcę teraz usunąć plik .swp!

Jak mogę w tym przypadku zmusić Vima do automatycznego usuwania pliku SWP?

Wygląda na to, że nie ma wbudowanego ustawienia, więc szukam odpowiedniego zdarzenia autocommand.

Jednym ze sposobów, który znalazłem, jest :e #po wiadomości, co powoduje, że opcje zamiany istnieją ponownie, a następnie „Usuń”. Ale tak naprawdę nie powinienem za każdym razem robić tych dodatkowych kroków.

Jewgienij Siergiejew
źródło
Dzięki! Odkryłem, że twoja :e #sztuczka jest, choć nie idealna, ale wciąż bardziej przydatna niż obecna odpowiedź poniżej. :-)
RayLuo

Odpowiedzi:

5

Uwaga: nie powiedziałeś, którego systemu operacyjnego używasz. Poniższe działa z powłoką Unix, ale jeśli używasz systemu Windows, możesz pobrać pozbawioną kości Cygwin lub inną powłokę.

Kiedyś robiłem to samo co ty, uruchom, :eaby ponownie otworzyć ten sam plik, aby uzyskać opcję usunięcia pliku odzyskiwania. Po awarii lub nieoczekiwanym ponownym uruchomieniu komputera usuwam wszystkie pozostałe pliki odzyskiwania Vima, uruchamiając vim -rpliki wymiany i pozwalając na kontynuowanie odzyskiwania.

Gdy pliki się nie zmieniły

Jeśli pliki się nie zmieniły, chcę natychmiast usunąć plik odzyskiwania. Byłoby wspaniale, gdyby Vim mógł to zrobić automatycznie, ale niestety tak nie jest.

Kiedy pliki się zmieniły

Jeśli pliki uległy zmianie, uruchamiam DiffOrigpolecenie, aby porównać różnice między wersją oryginalną a odzyskaną. Jeśli jestem zadowolony ze zmian w pliku odzyskiwania, wychodzę zapisując pliki za pomocą :xpolecenia. Jeśli nie, odrzucam odzyskane zmiany, rezygnując z :q!. Jeśli plik odzyskiwania nie jest powiązany z zapisanym plikiem, np. .swpZwykle używam :w filenamedo odzyskania bufora do pliku o nazwie pliku.

Pomocnik DiffOrig

Dodałem DiffOrig polecenia do mojego .vimrctak, że zawsze jest dostępny.

command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis | wincmd p | diffthis

Skrypt powłoki

W mojej powłoce uruchamiam następujący skrypt, aby znaleźć każdy plik wymiany w bieżącym drzewie katalogów. Każdy plik wymiany jest następnie używany do otwierania Vima w „trybie odzyskiwania”, a następnie jest usuwany po zamknięciu Vima.

find . -type f -name '.*.sw?' -exec vim -r "{}" -c DiffOrig \; -exec rm -iv "{}" \;

rm -iOpcja wymaga potwierdzenia ( y), aby usunąć plik. Jeśli jesteś bardziej pewny siebie i chcesz przyspieszyć proces, możesz to pominąć.

Anthony Geoghegan
źródło