Перемістіть курсор 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. Це дасть відносні номери рядків з абсолютним номером рядка для рядка, на якому знаходиться курсор.
Ісаак Грегсон,

2
Ви також можете рухатись вниз на ряд рядків, просто ввівши число, за яким слідує enter(для абсолютних номерів рядків просто вводьте його перед двокрапкою). Якщо ви звикли до jі kзвичайної розкладки клавіатури, це може бути не надто корисним, але як користувачеві стрілки, який використовує Colemak, enterлегше дістатися до Colemak j( yклавіша QWERTY )
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, але не враховуючи {,}, які, мабуть, є найкращою деталізацією для редагування коду! Дякую!
Томсон Комер

Точно знати, скільки рядків потрібно рухати, майже неможливо. {і} - мій найкращий варіант.
Андрей

12

Я возився з vim, і помітив, що -вас рухає вгору і +рухає вниз, так що ви можете:

10-

або ви могли б використовувати, kоскільки ви, швидше за все, звикли hjk lрухати курсором.


3
Для руху вперед enterпрацює так само, як і +після числа, і його легше досягти більшу частину часу
SnoringFrog

@SnoringFrog Так, але це просто для того, щоб існували певні відносини між вгору і вниз; Я не маю на увазі, щоб хтось насправді рухався вгору-вниз так, бо hjkl у будь-якому випадку був би найшвидшим.
Cilan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.