Переместить курсор x строк из текущей позиции в vi / vim

80

Есть ли способ переместить курсор на относительное количество строк в vi / vim? Предположим, у вас есть курсор на 10 строк под блоком кода, который вы хотите удалить. Если у вас есть номера строк, показанные в относительном порядке, было бы неплохо иметь команду «перейти на 10 строк вверх», которая перенесет вас туда.

Или, может быть, лучше показать абсолютные номера строк и пойти xgg, где x - номер строки?

Эрик Лещински
источник
Если вам придется повторять это несколько раз: superuser.com/questions/429917/…
toliveira

Ответы:

122

Да, конечно, выход есть. jи kдвигайтесь вниз и вверх на одну строку, так 10jи 10kдвигайтесь вниз и вверх на десять строк. Вы можете повторить любое движение, поставив перед ним число.

Вы также можете захотеть, set relativenumberесли это то, чем вы часто занимаетесь - это поможет вам сэкономить при подсчете, печатая номера строк относительно текущей строки, а не абсолютные числа.

Каскабель
источник
Благодаря! Я должен был понять, что счет будет применяться и к командам перемещения. Вы сделали мой день!
1
Начиная с Vim 7.4, можно видеть как относительные, так и абсолютные номера строк одновременно, добавив следующие строки в .vimrc set relativenumberи set number. Это даст относительные номера строк с абсолютным номером строки для строки, на которой находится ваш курсор.
Isaac Gregson
2
Вы также можете переместиться на несколько строк вниз, просто набрав число, за которым следует enter(для абсолютных номеров строк просто поставьте перед ним двоеточие). Если вы привыкли к jи kи нормальной раскладке клавиатуры, которая не может быть слишком полезно, но как стреловидные с помощью пользователя Colemak, enterлегче достичь , чем Colemak j(QWERTY - yключ)
SnoringFrog
49

Перемещение 10 строк вверх и вниз может не соответствовать вашей задаче, а также другим вариантам. Рассмотрим другие движения:

Ctrlf, Ctrlbстраница вперед и назад.

}, {переходите вперед и назад на один абзац.

Вы можете написать правила в вашем vimrc для привязки 10jк ключу, скажем, Jчтобы переместиться на 10 строк вниз, добавив следующую строку в ваш файл vimrc: map <S-j> 10j

Однако вы бы перезаписали полезную существующую Jкоманду (соедините две строки). Поиск хорошо расположенной неиспользуемой комбинации клавиш для 10j/ 10kможет быть трудным, поэтому я предлагаю использовать существующие движения, о которых я упоминал.

Вы также можете знать, что можете перейти назад к слову, которое вы видите, делая: ?somewordи вперед к слову, которое вы видите, делая /someword. Это будет быстрее, чем пытаться переместиться вверх / вниз на 10 строк и затем переместить курсор в точное место. Если вы не можете придумать простую строку поиска для рассматриваемой строки, вы всегда можете перейти к номеру строки, как вы сказали ( xgg).

Ольховский
источник
Страницы вверх и вниз сделали то, что я искал!
jeremyjjbrown
1
Я все время использую ctrl-f и ctrl-b, но упускаю из виду {,}, которые, возможно, являются лучшей детализацией для редактирования кода! Благодаря!
Thomson Comer
Точно узнать, сколько линий нужно переместить, практически невозможно. Я предпочитаю {и}.
Андрейс
12

Я возился с vim и заметил - вы двигаетесь вверх и +вниз, поэтому вы можете:

10-

или вы можете использовать, kпоскольку вы, скорее всего, привыкли к перемещению курсора hjk l.

Cilan
источник
3
Для движения вперед enterработает так же, как +после числа, и большую часть времени его легче достать
SnoringFrog
@SnoringFrog Да, но это просто так, чтобы между верхом и низом могла быть какая-то связь; Я не хочу, чтобы кто-то на самом деле так двигался вверх и вниз, потому что hjkl в любом случае будет самым быстрым.
Cilan