Vim: Przesuń kursor do ostatniej pozycji

251

Czy w (g) Vimie można przesunąć kursor do poprzedniej pozycji (w trybie normalnym)? Idealnym rozwiązaniem byłoby przewijanie w przód iw tył na liście poprzednich pozycji kursora. Ale wystarczy samo przejście do ostatniej lokalizacji (coś cd -w stylu bash z katalogami).

Oto mała demonstracja:

line |1| <- cursor position
line 2
line 3
line 4

Załóżmy, że tak 2j, oto jak teraz:

line 1
line 2
line |3| <- cursor position
line 4

Teraz chciałbym nacisnąć coś (innego niż 2koczywiście), aby przejść z powrotem do pierwszej pozycji i ewentualnie do poprzednich pozycji.

Idan K.
źródło

Odpowiedzi:

409

Najszybszym sposobem jest trafienie:

''

(dwa apostrofy) lub:

``

(dwa tyknięcia). Zauważ, że różnica polega na tym, że backstick idzie w to samo miejsce na linii, podczas gdy apostrof przechodzi na początek linii. Na klawiaturze brytyjskiej apostrof jest bardziej dostępny, więc zwykle używam tej. Jest mnóstwo takich przydatnych znaków, patrz :help mark-motions.

W przypadku niektórych innych ruchów (nie 2jsądzę) dostępna jest również lista skoków, która pozwala poruszać się w jedną i w drugą liczbę ruchów. CtrlOi CtrlIwykonaj tę nawigację, ale zobacz :help jump-motionswięcej informacji.

DrAl
źródło
3
właściwie żaden z nich nie zachowuje się dokładnie tak, jak się spodziewam, ale chyba nic innego nie jest dostępne.
Idan K,
1
@Idan K - w jaki sposób (podwójne kliknięcie) nie daje dokładnie tego, czego chcesz? (Z wyjątkiem aspektu „historii”).
Dan
3
@ Dan: jeśli wypróbuję to na powyższym przykładzie, zobaczę takie zachowanie: stoję na linii 1, następnie naciskam jdwa razy z rzędu (teraz jestem na linii 3), a następnie naciskając dwukrotnie backtick, dostajesz się do linii 1 i oczekuję aby przejść do linii 2.
Idan K,
2
Myślę, że musisz się przenieść (2j lub coś), a następnie edytować (lub wykonać dowolną czynność, aby zmodyfikować tekst), a następnie użyć przycisku „”, aby wrócić do poprzedniej pozycji. Nie jest logiczne używanie „2j”, nic nie rób i wróć do poprzedniej pozycji
Asenar
8
@IdanK Lista skrótów jest aktualizowana (tzn. Poprzednia pozycja kursora jest rejestrowana) tylko wtedy, gdy użyjesz rzeczywistego „skoku”, który jest (jak sądzę) dowolnym poleceniem ruchu innym niż i j k lruchy. (Pełna lista, z dokumentów pomocy, jest "'"', "`", "G", "/", "?", n", "N", "%", "(", ")", "[[", "]]", "{", "}", ":s", ":tag", "L", "M", H" and the commands that start editing a new file.) Więc nie, to nie „cofnie” 2jlub podobnie, ale zadziała dla prawie wszystkiego innego. Ma to sens, ponieważ 2ji in. mają już proste inwersje ( 2kitp.), podczas gdy inne nie.
Kyle Strand
61

Możesz także używać przycisków g;i, g,aby przechodzić do tyłu i do przodu na liście poprzednich lokalizacji edycji .

Na klawiaturach spoza USA

W moich szwajcarskich i niemieckich układach klawiatury pisanie w sposób ;niewygodny wymaga użycia Shiftklawisza. W związku z tym, że określone g-, jako wygodniejszy alias dla g;na $MYVIMRC:

" Map g- as an alias for g;
nnoremap g- g;
Serge Stroobandt
źródło
Chociaż bardzo to lubię, przeskakuje tylko między zmianami w jednym pliku. Jeśli edytujesz bufor 1, a następnie edytujesz bufor 2, nie przeskakuje z powrotem do bufora 1.
czwartek
39

Dlaczego nikt nie wymyślił problemu z odpowiedzią DrAl ? ''Lub ``nie rozwiąże problemu oryginalnego ten post! Te dwa polecenia nie będą działać w przypadku niektórych ruchów kursora 2j, przynajmniej dla mnie. Sprawi, że początkujący będzie bardziej zdezorientowany.

Zachowanie ''lub ``i i CtrlIlub CtrlOoparte jest na liście skoków. 2jNie będzie zapisać zmiany pozycji na liście skoku więc to polecenie nie zadziała 2j.

''lub ``przełączaj między ostatnią pozycją a bieżącą pozycją. CtrlIi CtrlOprzeglądaj historię list skoków.

g;i g,poruszaj się po pozycjach edycji, które są również bardzo często używane.

ZhaoGang
źródło
1
Dzięki za zwrócenie na to uwagi! Zastanawiam się, co wtedy będzie działać w takich przypadkach 2j?
33

Bezpośrednio z pomocy (: pomoc w skoku):

: ju [mps] Wydrukuj listę skoków (nie polecenie ruchu). {not in Vi} {niedostępne bez | + jumplist | funkcja}

                          *jumplist*

Skoki są zapamiętywane na liście skoków. Za pomocą poleceń CTRL-O i CTRL-I możesz przejść do pozycji kursora przed starszymi skokami i do tyłu. 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. {niedostępne bez | | jumplist | funkcja}

Facundo Casco
źródło