Odpowiedzi:
`.
Polecenia spowoduje przejście do ostatniej zmiany.
`
Idzie do znaku, a .
to „specjalne” znak, który jest automatycznie ustawiany na pozycji, w której ostatnia zmiana została dokonana. Zobacz :help `.
więcej informacji.
Jest też ``
coś, co spowoduje powrót do miejsca, w którym znajdował się kursor przed ostatnim skokiem. Zobacz : pomoc,``
aby uzyskać więcej informacji.
Kolejnym przydatnym znakiem jest `^
; jest to pozycja, w której kursor był ostatnim razem, gdy tryb wstawiania został zatrzymany. Zobaczyć :help `^
.
Zobacz :help mark-motions
bardziej ogólne informacje na temat używania znaków (w tym niektóre inne „specjalne” znaki, które są ustawiane automatycznie).
'
(apostrof) zamiast `
(backtick).
Oto inne podejście, które pasuje do danego scenariusza i przeskoczy do miejsca, w którym byłeś bezpośrednio przed gg
(nie do ostatniej zmienionej linii).
Po naciśnięciu gg
stara pozycja kursora zostaje przesunięta na listę skoków . Od :help jumplist
:
Skoki są zapamiętywane na liście skoków. Za pomocą polecenia
CTRL-O
iCTRL-I
możesz przejść do pozycji kursora przed starszymi skokami i ponownie. W ten sposób możesz poruszać się w górę i w dół listy. Dla każdego okna istnieje osobna lista przeskoków. Maksymalna liczba wpisów jest ustalona na 100.[…]
Jeśli użyjesz polecenia skoku, bieżący numer linii zostanie wstawiony na końcu listy skoku. Jeśli ten sam wiersz był już na liście przeskoków, jest on usuwany. Powoduje to, że po powtórzeniu powrócisz
CTRL-O
do starych pozycji tylko raz.
Wymaga to używania Vima (nie vi) z tą +jumplist
funkcją. Jeśli :echo has('jumplist')
drukuje 1
, możesz tego użyć.
Aby dodać do odpowiedzi dnetserra i komentarza Petera Rinckera, Vim utrzymuje listę zmian i ma z tym kilka poleceń.
:changes
wyświetli listę zmian, pokazując, gdzie były i jakie były. Na przykład:
change line col text
2 8 17 #include <stdio.h>
1 3 0 #include "stm32f407.auto.h"
>
Linia >
pokazująca, gdzie jesteś na stosie zmian, przypomina coś w rodzaju listy skoków ( :jumps
) lub stosu znaczników ( :tags
). Podobnie jak lista przeskoków i stos znaczników, możesz przeglądać tę listę.
W trybie normalnym ruchy mają g;
przejść do poprzedniej lokalizacji zmiany i g,
przejść do następnej. Możesz także wpisać numer zmiany przed g;
lub g,
przejść do tej zmiany z listy. Powyżej 2g;
zaprowadzi mnie do miejsca, w którym nastąpiła zmiana dotycząca stdio.h.
Gdy są na środku stosu, liczby z :changes
aktualizacji pokazują względne odległości. Na przykład:
change line col text
1 8 17 #include <stdio.h>
> 0 3 0 #include "stm32f407.auto.h"
1 10 4 other
To pokazuje, że mogę cofnąć się o jeden ( 1g;
lub tylko g;
) lub o jeden do przodu ( 1g,
lub tylko g,
).
Jest to świetne, jeśli zmiana, którą chcesz wprowadzić, pojawiła się kilka modyfikacji temu
Wadą tego jest to, że nie wydaje się działać jak normalny ruch. Na przykład nie można zrobić, dg;
aby usunąć z kursora do poprzedniej lokalizacji zmiany, d'.
a jednocześnie d'^
wykonać ruchy.
Ponieważ polecenie cofnięcia w Vi będzie działać jako powtórzenie, gdy ostatnie polecenie zostało cofnięte, wykorzystałem uu
jako środek powrotu do miejsca, w którym ostatnio edytowałem.
Jeśli korzystasz z Vima z nocompatible
ustawieniami (jak większość ludzi), chcesz użyć, u
a następnie CTRL+R
cofania i ponawiania. W przeciwnym razie uu
będzie działać jak w Vi.
:set nocompatible
nie zostanie użyty.
vim
(z nocompatible
) wykonuje dwa cofnięcia z uu
, ale używam u
i CTRL+r
dla tego samego efektu.
g;
i,g,
aby przechodzić między pozycjami na liście zmian. Patrz:h g;
i:h g,