Vim: более быстрый способ выделения блоков текста в визуальном режиме


190

Я уже давно использую vim и знаю, что выделять блоки текста в визуальном режиме так же просто, как SHIFT+V и перемещать клавишу со стрелкой вверх или вниз построчно, пока не достигну конца блока текста, который я хочу выбран.

У меня вопрос - есть ли более быстрый способ в визуальном режиме выделить блок текста, например, с помощью SHIFT+ Vс указанием номера строки, в которой я хочу остановить выделение? ( :35например, где 35 - номер строки, которую я хочу выбрать до - это, очевидно, не работает, поэтому мой вопрос заключается в том, чтобы найти способ сделать что-то похожее на это ...)


3
+1 Хороший вопрос, потому что я часто делал что-то подобное. Мне интересно , если возможно , это не место , начать работу с использованием v%или v/patternили что - то еще?
user786653

9
vip выберите внутренний абзац или выберите внутреннее предложение.
SergioAraujo

27
V35Gбудет визуально выбирать из текущей строки в строку 35, а также V10jили V10kбудет визуально выбирать следующие или предыдущие 10 строк
Стефан

1
@ Стефан, это именно то, что я искал. Спасибо!!
визг

для линии выбора использования I ярлык: nnoremap <Space> V. В режиме визуальной линии просто щелкните правой кнопкой мыши, чтобы определить выделение (по крайней мере, в Linux это так). Во всяком случае, более эффективно, чем с помощью только клавиатуры.
Михаил V

Ответы:


212

В дополнение к тому, что сказали другие, вы также можете расширить свой выбор, используя поиск по шаблону.

Например, v/fooвыберете из вашей текущей позиции следующий экземпляр «foo». Если вы действительно хотите перейти к следующему экземпляру «foo», например, в строке 35, просто нажмитеn чтобы расширить выделение до следующего экземпляра, и так далее.

Обновить

Я не часто это делаю, но я знаю, что некоторые люди широко используют метки для визуального выбора. Например, если я нахожусь в строке 5 и хочу выбрать строку 35, я мог бы нажать, maчтобы поместить метку aв строку 5, затем :35перейти в строку 35. Shift+, vчтобы перейти в визуальный режим, и, наконец, `aвыбрать обратно, чтобы отметить a,


21
Если вам нужно включить шаблон, который вы можете использовать v/foo/e. eОзначает «конец» подходящий шаблон.
Питер Ринкер

6
И вы можете изменить из этой строки смещение: V / foo / + 5 или V / foo / -5 (я использую визуальный режим, как автор).
Бхишмар

Что бы вы сделали, если бы вы хотели выбрать диапазон текста, соответствующий вашему запросу; то есть: найти и выбрать (целое слово) ваш поисковый запрос?
Даниэль Парк

5
@DanielPark Чтобы выбрать текущее слово, используйте v i w. Если вы хотите выбрать текущий непрерывный не пробел, используйте v i Shift+ w. Разница будет в том, что когда здесь будет курсор MyCla|ss.Method, первое комбо выберет, MyClassа второе выберет все.
Джей

1
Спасибо. Обнаружено, что также использование v i w sпозволяет эффективно выполнять операцию «замены».
Даниэль Парк

113
G                       Goto line [count], default last line, on the first
                        non-blank character linewise.  If 'startofline' not
                        set, keep the same column.
                        G is a one of jump-motions.

V35G достигает того, что вы хотите


89

Vim это язык. Чтобы по-настоящему понять Vim, вы должны знать язык. Многие команды являются глаголами, и у vim также есть объекты и предлоги.

V100G
V100gg

Это означает «выбрать текущую строку до 100 включительно».

Текстовые объекты - это то, в чем заключается сила. Они вводят больше объектов с предлогами.

Vap

Это означает «выбрать вокруг текущего абзаца», то есть выбрать текущий абзац и пустую строку после него.

V2ap

Это означает «выбрать вокруг текущего абзаца и следующего абзаца».

}V-2ap

Это означает «перейти к концу текущего абзаца, а затем визуально выбрать его и предыдущий абзац».

Понимание Vim как языка поможет вам получить максимальную отдачу от него.

После выбора вниз вы можете комбинировать с другими командами:

Vapd

С помощью приведенной выше команды вы можете выделить вокруг абзаца и удалить его. Замените на da, yчтобы скопировать или a, cчтобы изменить или на, pчтобы вставить.

Как только вы поймете, как все эти команды работают вместе, вам в конечном итоге не нужно будет ничего визуально выбирать. Вместо того, чтобы визуально выбирать, а затем удалять абзац, вы можете просто удалить абзац с помощью dapкоманды.


} V-2ap Использование -2 действительно умно.
Амбариш

40

v35G выберет все от курсора до строки 35.

vпереводит вас в режим выбора, 35указывает номер строки, которую вы хотитеG перейти.

Вы также можете использовать, v}который будет выбирать все до начала следующего абзаца.



9

Shift+V n j или Shift+V n k

Это выбирает текущую строку и следующие / предыдущие nстроки. Я нахожу это очень полезным.


Это простой способ, который я искал. Спасибо
ARSAL


6

v%

выберет весь блок.

Играть также с:

v}, vp, vsИ т.д.

Смотрите помощь:

:help text-objects

в котором перечислены различные способы выбора букв, слов, предложений, абзацев, блоков и т. д.



4

Вы можете нажать, vi}чтобы выбрать блок, заключенный в {}квадратные скобки, где находится курсор в данный момент.

На самом деле не имеет значения, где вы находитесь внутри этого блока (просто убедитесь, что вы находитесь во внешнем блоке). Также вы можете изменить {на все, что имеет пару, как )или ].


3

Вы всегда можете просто использовать номера предшествующих для повторения действий:

  • В визуальном режиме введите 35 и курсор переместится вниз 35 раз, выбрав следующие 35 строк
  • В обычном режиме:
    • удалить 35 строк 35dd
    • вставить 35 раз 35p
    • отменить 35 изменений 35u
    • и т.п.

3

просто нажмите Shift v line number gg

пример: ваша текущая строка на строку 41 Просто нажмите Shift v 41 gg


1

} означает переместить курсор к следующему абзацу. Итак, используйте, v}чтобы выбрать весь абзац.


0

Для выбора всех в визуальном: введите Esc, чтобы убедиться, что вы находитесь в нормальном режиме

:0 

введите ENTER, чтобы перейти к началу файла

vG

Вы можете использовать ggв обычном режиме, чтобы перейти к первой строке также.
huangzonghao

0

Это может пригодиться, чтобы знать:

Например, чтобы выбрать одинаковое количество строк, используйте 1v Вы должны были внести некоторые изменения, чтобы иметь возможность использовать их по 1vблокам или по линиям.

Сегодня я увидел этот удивительный совет отсюда :

 :5mark < | 10mark > | normal gvV
 :5mark < | 10mark > | normal gv

Вы также можете сбросить границы визуального блока следующим образом:

m< .......... sets the visual mode start point
m> .......... sets the visual mode end point

0

Я использую это со сгибом в режиме отступа:

v открыть визуальный режим в любом месте блока

zaza включить его дважды

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.