Ta odpowiedź brzmi:
System cofania / ponawiania Vima jest nie do pobicia. Wpisz coś, cofnij, wpisz coś innego i nadal możesz odzyskać pierwszą rzecz, którą wpisałeś, ponieważ Vim używa drzewa cofania zamiast stosu. W prawie każdym innym programie historia pierwszego wpisanego tekstu przepada w takiej sytuacji.
To jest pierwsza taka wiadomość. Jak mogę cofnąć się wzdłuż drzewa?
Odpowiedzi:
Zobacz także
:h undo-redo
, który zawiera listę wszystkich poleceń i ich zastosowania.Istnieją dwa sposoby przechodzenia przez drzewo cofania. Jednym z nich jest cofnięcie się w czasie.
g+
ig-
przejdzie przez wszystkie węzły w drzewie w porządku chronologicznym lub odwrotno-chronologicznym (co może być nieco zagmatwane, ponieważ może dowolnie przeskakiwać między cofanymi gałęziami, ale jeśli zrobiszg-
wystarczająco długo, zawsze dotrzesz tam, gdzie trzeba ostatecznie).:earlier
i:later
weź deskryptor czasu, taki jak7m
lub1h
; znowu może to przeskakiwać dowolnie między cofnięciami gałęzi.Innym sposobem jest przeskakiwanie do określonych węzłów w drzewie przy użyciu
:undo n
gdzien
jest liczbą akcji. (Wszystkie akcje, tj. Dodawanie tekstu, usuwanie, zamiana, są numerowane sekwencyjnie w miarę ich wykonywania.) Możesz sprawdzić liczbę działań na liściach drzewa cofania za pomocą:undolist
. Pozwoli ci to łatwo przeskakiwać między gałęziami. Następnie możesz używaću
i,Ctrl-R
aby poruszać się w górę iw dół tej gałęzi.W pomocy Vima jest kilka dobrych przykładów. Najlepszym sposobem, aby dowiedzieć się, jak to działa, jest trochę się tym pobawić.
źródło
undojoin
że nie ma to nic wspólnego z gałęziami; w rzeczywistości kolejna sekcja pomocy zaczyna się od stwierdzenia „Powyżej omówiliśmy tylko jedną linię cofania / ponawiania. Ale możliwe jest również rozgałęzienie”. Czy jest jakiś sposób na użycieundojoin
z gałęziami, których po prostu nie widzę?Trochę spóźniłem się na imprezę, ale pomyślałem, że wspomnę, że napisałem wtyczkę do wizualizacji drzewa cofania dla Vima: http://bitbucket.org/sjl/gundo.vim/
Osobiście stwierdziłem, że jedynym sposobem na nadanie mu sensu było narysowanie tego drzewa na wykresie.
źródło
Plug 'sjl/gundo.vim'
a następniennoremap <F5> :GundoToggle<CR>
(zastępując<F5>
dowolną sekwencją klawiszy, którą chcesz powiązać)Ta strona wyjaśnia wszystko, co musisz wiedzieć:
http://vimdoc.sourceforge.net/htmldoc/usr_32.html
źródło
Jeśli używasz Vima, możesz poruszać się po drzewie cofania za pomocą:
u
: (cofnij) cofnij się w drzewie cofaniaCtrl+R
: (ponów) przejdź do przodu w drzewie cofaniaInne sposoby cofnięcia lub przyspieszenia dokumentu w czasie:
:earlier 15m
: cofnij się w czasie o 15 minut:later 15m
: ruch do przodu w czasie 15 minutźródło
earlier
ilater
nie porusza się po gałęziach. Spodziewałbym się, że większość ludzi tak naprawdę nie obchodzi lub nie pamięta różnych gałęzi, które stworzyli. Ale chcę tylko cofnąć się w czasie. Jeśli chcesz tworzyć gałęzie i nazywać je być może,git
lepszym rozwiązaniem jest system kontroli wersji.Wiem, że odpowiedź na to pytanie została udzielona, ale pomyślałem, że dodam przykład.
Utwórz nowy plik i wpisz:
undol
wyświetli drzewo cofania. W tym momencie nic nie cofnąłeśteraz wciśnij ESC i zmień linię na:
przełącz na tryb normalny i naciśnij przycisk u (cofnij), powinno to usunąć „stare”. Jeśli
undol
zaznaczysz, w tym momencie nadal masz tylko jedną gałąź.teraz zmodyfikuj linię, tak aby brzmiała:
Teraz
:undol
pokazuje:Możesz przejść do pierwszej gałęzi, wpisując
przeniesie Cię to na koniec gałęzi przypisanej do numeru 2. Możesz poruszać się wzdłuż tej gałęzi za pomocą
g+
ig-
. W tym momencieg+
nic nie zrobisz (jesteś przy liściu). Jeśli naciśnieszg-
„stare” zostanie usunięte (przechodzisz przez pierwsze drzewo cofania). Oznacza to, że jeśli usuniesz „stare” za pomocąg-
ig+
ponownie naciśniesz , „stare” zostanie przywrócone.Jeśli wpiszesz
Przeskoczysz do liścia drugiej gałęzi cofania i przeczyta:
źródło
Wiele z tego można podsumować tutaj:
http://vim.wikia.com/wiki/Using_undo_branches
źródło
Oprócz korzystania z gundo.vim chciałbym wspomnieć o
g+
ig-
źródło
Pakiet undotree jest napisany w czystym języku vimscript, więc nie ma wymagań.
I dodaj to do swojego vimrc, zanim będzie za późno:
źródło