Przenieś kursor o linie od bieżącej pozycji w vi / vim

80

Czy istnieje sposób na przesunięcie kursora o względną liczbę linii w vi / vim? Załóżmy, że masz kursor 10 linii pod blokiem kodu, który chcesz usunąć. Jeśli masz numery wierszy pokazane we względnej kolejności, dobrze byłoby mieć polecenie „przeskocz o 10 wierszy w górę”, które zaprowadzi Cię tam.

A może lepiej jest wyświetlić bezwzględne numery linii i przejść do xgg, gdzie x jest numerem linii?

Eric Leschinski
źródło
Jeśli musisz to powtarzać wiele razy: superuser.com/questions/429917/…
toliveira

Odpowiedzi:

122

Tak, oczywiście, że jest sposób. ji kruch w dół i do góry jednej linii, więc 10ji 10kruch w dół i w górę dziesięć wierszy. Możesz powtórzyć dowolny ruch, stawiając przed nim liczbę.

Możesz również chcieć, set relativenumberjeśli jest to coś, co robisz często - pomoże to zaoszczędzić zliczanie, drukując numery wierszy względem bieżącego wiersza, zamiast liczb bezwzględnych.

Cascabel
źródło
Dzięki! Powinienem był się domyślić, że liczenie będzie miało zastosowanie również do poleceń ruchu. Zrobiłeś mój dzień!
1
Od Vima 7.4 możliwe jest jednoczesne oglądanie względnych i bezwzględnych numerów linii, dodając następujące znaki do .vimrc set relativenumberi set number. To da względne numery linii z bezwzględnym numerem linii dla linii, na której znajduje się kursor.
Isaac Gregson
2
Możesz także przejść w dół o kilka wierszy, po prostu wpisując liczbę, po której następuje enter(w przypadku bezwzględnych numerów wierszy wystarczy poprzedzić go dwukropkiem). Jeśli jesteś przyzwyczajony do ji ki normalny układ klawiatury, który nie może być zbyt pomocny, ale jak strzała wykorzystujących Colemak użytkownika, enterjest łatwiejsze do osiągnięcia niż Colemak j(QWERTY yklucz)
SnoringFrog
49

Przesunięcie 10 linii w górę iw dół może nie pasować do twojego zadania, jak również do innych opcji. Rozważ inne ruchy:

Ctrlf, Ctrlbstrona do przodu i do tyłu.

}, {przejdź do przodu i do tyłu o jeden akapit.

Możesz napisać reguły w swoim vimrc, aby 10jprzypisać się do klawisza, powiedzmy, Jaby przejść w dół o 10 linii, dodając następującą linię do pliku vimrc: map <S-j> 10j

Jednak nadpisałbyś użyteczne istniejące Jpolecenie (połącz dwie linie). Znalezienie dobrze ustawionej, nieużywanej kombinacji klawiszy dla 10j/ 10kmoże być trudne, więc sugeruję użycie istniejących ruchów, o których wspomniałem.

Możesz także chcieć wiedzieć, że możesz cofnąć się do słowa, które widzisz, wykonując czynność: ?somewordi przejść do słowa, które widzisz, wykonując czynność /someword. Będą one szybsze niż próba przesunięcia o 10 linii w górę / w dół, a następnie przeniesienia kursora do dokładnej lokalizacji. Jeśli nie możesz wymyślić prostego ciągu wyszukiwania dla danej linii, zawsze możesz przejść do numeru linii, jak powiedziałeś ( xgg).

Olhovsky
źródło
Strona w górę iw dół osiągnęła to, czego szukałem!
jeremyjjbrown
1
Używam ctrl-f i ctrl-b cały czas, ale przeoczę {,}, które są prawdopodobnie najlepszą szczegółowością do edycji kodu! Dzięki!
Thomson Comer
Wiedza o tym, ile dokładnie linii trzeba przesunąć, jest prawie niemożliwa. {i} to moja preferowana opcja.
Andrejs
12

Bawiłem się z vimem i zauważyłem, że -porusza Cię w górę i w +dół, więc możesz:

10-

lub możesz użyć, kponieważ najprawdopodobniej jesteś przyzwyczajony do ruchu kursora hjk l.

Cilan
źródło
3
enter+
Ruch
@SnoringFrog Tak, ale to tylko po to, żeby istniała relacja między górą i dołem; Nie chodzi mi o to, żeby ktokolwiek faktycznie poruszał się w górę iw dół w ten sposób, ponieważ hjkl i tak byłby najszybszy.
Cilan,