Як використовувати відносні номери рядків у режимі командного рядка?


16

Нещодавно я дізнався від Практичного Vim спосіб копіювати або переміщувати блок рядків без необхідності переміщення курсору з поточного положення. Це робиться в режимі командного рядка. напр

:123,133m.  # moves lines from 123 to 133 below the cursor position.

Хоча мені це подобається, боляче вводити номери довгих рядків, особливо коли файл має занадто багато рядків.

Часом рядки для переміщення знаходяться відносно біля курсору (але я не хочу переміщувати курсор, рив, повертайтеся туди, де я був, вставте!). Було б чудово, якби я міг використовувати відносні числа, подібні до того, як у нас у звичайному режимі. Це як сказати

перемістіть сюди 5 рядків, що на 10 рядків вище поточного

Коротше кажучи, як використовувати відносні числа в режимі командного рядка (аналогічно звичайному режиму)?

Відповіді:


23

Якщо припустити, що ваші лінії проходять від 15 до 10 рядків вище поточного, ви можете досягти того, що ви просили, використовуючи відносні номери рядків:

:-10,-15m.

На жаль, визначаючи зворотній діапазон, Vim просить підтвердити, чи це саме ви хотіли. Щоб уникнути кроку підтвердження, ви можете ввести silentперед командою або просто вказати діапазон переадресації:

:-15,-10m.

Як ви могли очікувати, ви +можете використовувати для позначення рядків нижче поточного.

Детальну допомогу можна знайти за допомогою:

:help cmdline-ranges

1
Але я жодного разу не використовував цю функцію. Я роблю 15k d5j 10j P.
joeytwiddle

Різниця полягає в тому, що 15k, 5j працює в командному режимі, а той, що пояснюється у відповіді, знаходиться у режимі вставки. Отже, виходячи з режиму, ми можемо вибрати відповідний. Команди в режимі вставки - це, як правило, критерії вибору для виконання інших команд.
Soundararajan

12

Ви можете використовувати жорсткі цифри у своєму діапазоні:

:200,300command

Або відносні числа:

:-27,+46command

Або ручні позначки:

:'a,'bcommand

Або автоматичні позначки:

:'[,'>command

Або пошук:

:?foo?,/bar/command

Або ярлики рядків:

:.,$command

Або будь-яке поєднання наведених вище прийомів:

:?foo?,+46command
:'a,$command
...

3

Ви можете використовувати відносну адресацію (наприклад .-10,.+3) з будь-якою командою Ex, cp. :help :range.

Крім того, подивіться на мій плагін LineJuggler ; він надає кілька коротких відображень для переміщення ліній навколо або дублювання, і всі ці відображення приймають відносне зміщення рядків як [count].

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.