Najlepsze praktyki wymiany plików VIM?

14

Za każdym razem, gdy przerywam sesję w vimie, tracąc połączenie, jestem raczej wypełniony dredem (a jednak nadal używam vim ... jakim masochistą muszę być), ponieważ kiedy ponownie otwieram moje pliki, stos wymiany - pliki czekają, aby spróbować zniszczyć moją pracę. Jakie są najlepsze praktyki dotyczące pracy z plikami wymiany vim? Czy po prostu wybierasz najnowszy? Jeśli plik działa w oczekiwany sposób, czy po prostu usuwasz pliki wymiany? Jak się ich pozbyć?

leeand00
źródło
5
Pliki wymiany służą do ochrony pracy. Rozważ użycie ekranu GNU.
1
Nie chcę wyłączać tej funkcji; to denerwujące, ale jak twierdzisz, przydatne.
leeand00
1
Chcę tylko wiedzieć, jak właściwie z niego korzystać.
leeand00
2
@DrEval Używam tmux
leeand00
2
Jeśli używasz tmux, nie powinieneś martwić się o utratę połączenia: po prostu podłącz się ponownie do sesji po ponownym połączeniu. Może Cię również zainteresować mosh i wtyczka Recover @ ChristianBrabandt .
Bogaty

Odpowiedzi:

24

Nie panikuj!

Odzyskiwanie plików jest zawsze bezpieczne, ponieważ vim nigdy nie zapisuje żadnych zmian, dopóki sam ich nie napiszesz. Odzyskiwanie z pliku wymiany, a następnie zamykanie bez zapisywania niczego nie zmieni.

Uporządkuj swoje pliki wymiany:

Pobierz vim, aby umieścić wszystkie swoje pliki wymiany w tym samym miejscu, abyś zawsze wiedział, gdzie one są:

set directory^=$HOME/.vim/swap//

lub gdziekolwiek wolisz. Użycie //na końcu nazwy pliku powoduje, że vim używa bezwzględnych ścieżek do nazw plików wymiany, więc nie dostajesz kolizji nazw. Upewnij się, że katalog istnieje, bo vim go nie użyje (nie utworzy go dla ciebie).

Uwaga: Działa to tylko w przypadku zmiennych środowiskowych, jeśli chcesz użyć zmiennej vimscript, musimy użyć :executemagii:

execute "set directory^=".my_vim_home_var."/swap//"

Zróżnicuj różnice:

Help Vim sugeruje bardzo przydatne polecenia do wykorzystania w tej sytuacji: :DiffOrig. To nie jest domyślne polecenie vim , więc skopiuj implementację z :h :DiffOrigdo swojego vimrc. (dotyczy to również wersji $VIMRUNTIME/defaults.vimvim8). Teraz możesz odzyskać plik i po prostu uruchomić DiffOrig, aby uzyskać vimdiff tego, co zmieniło się od niezmodyfikowanej wersji.

Jeśli chcesz porównać zawartość wielu plików wymiany, odzyskaj plik z każdym innym plikiem wymiany, a następnie zapisz wynik w plikach tymczasowych. Teraz załaduj pliki i uruchom :diffthiskażdy plik, dokonaj żądanych zmian, zapisz z powrotem do oryginalnego pliku oraz usuń pliki tymczasowe i zamień.

Przydatne polecenia:

:swapname: pobierz nazwę, której używa vim dla pliku wymiany dla bieżącego bufora ( :h :swapname) :recover: odzyskuje wybrany plik, tak samo jak po uruchomieniu vima i naciśnięciu R( :h :recover)

Sprawdź pomoc:

Vim ma cały rozdział instrukcji użytkownika na prostą: :usr_11.txt
pomoc odniesienia Vim jest na plikach wymiany: :h swap-file, h recovery
Pomoc w opcji katalogów (do ustawiania wymiany lokalizację pliku)::h 'directory'

Edycja: Zmodyfikowany przykład ustawienia katalogu, jak wskazano w komentarzach @B Layer

flemingfleming
źródło
Co powiesz na to, że skończysz z wieloma plikami wymiany? Z powodu wielu zerwanych połączeń?
leeand00
1
Wspomniałem o tym w drugim akapicie „Diff the Differencces”. Kiedyś użyłeś mechanizmu różnic, aby określić, które zmiany chcesz zachować, usuń wszystkie tymczasowe pliki i stare pliki wymiany, które wprowadziłeś (teraz wiesz, gdzie są wszystkie pliki wymiany).
flemingfleming
1
Do twojej wiadomości, nie musisz używać exec... set directory^=$HOME/.vim/swap//działa dobrze, dopóki $HOMEjest zainicjowana zmienna środowiskowa. Zobaczyć :h expand-env. Działa również z dictionary, undodiri backupdirżeby wymienić tylko kilka.
B Layer
Dzięki za przypomnienie mi o tym! Zamiast tego używam w mojej konfiguracji zmiennej vimscript, stąd też wykonanie i zapomniane zmienne środowiskowe tego nie potrzebują. Myśląc o tym, prawdopodobnie powinienem po prostu użyć vima do ustawienia zmiennej środowiskowej.
flemingfleming
2

Osobiście wyłączyłem pliki wymiany i tworzenia kopii zapasowych, ponieważ ma tendencję do tworzenia plików wymiany i tworzenia kopii zapasowych wszędzie i często powoduje konflikty. Trwałe cofanie Vima było znacznie bardziej niezawodne i wolne od błędów.

Vim ma obecnie trwałe cofanie, jest to znacznie bardziej szczegółowa metoda tworzenia kopii zapasowych. Za każdym naciśnięciem przycisku Escprzechwytywany jest bieżący stan pliku.

Możesz użyć :undolistlub wtyczek takich jak gundo lub cofnij drzewo, aby przeglądać historię cofania.

Aby użyć vima w ten sposób:

  • utwórz katalog, w którym będziesz przechwytywać historię edycji każdego pliku
  • powiedz vimowi, aby użył tego katalogu
  • włącz trwałe cofanie

W skorupce:

mkdir ~/.vim/undodir

W Vimie

set undodir=~/.vim/undodir
set undofile

Aby wyłączyć pliki wymiany: :set noswapfile

alpha_989
źródło
1
Istnieje kilka dość dużych problemów z tą odpowiedzią. 1. Trwałe cofanie rozwiązuje inny problem podczas wymiany plików (i 'writebackup'rozwiązuje jeszcze jeden problem). Włączone trwałe cofanie nie pomoże, jeśli komputer ulegnie awarii. Państwo może argumentować, że pliki wymiany są konieczne z innych powodów (Modern stabilności OS istnienie UPSes), ale jeszcze tego nie uczyniły w tej odpowiedzi. 2. ustawienie 'undodir' nie umożliwia trwałego cofania! Trzeba ustawić 'undofile'na to
Rich