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 достигает того, что вы хотите

bheeshmar
источник
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}который будет выбирать все до начала следующего абзаца.

michaelmichael
источник
16

Для выбора количества строк:

shift + v 9j - выберите 10 строк

mateusz.fiolka
источник
2
Для небольших диапазонов это хорошо, особенно в паре с:set rnu
Питером Ринкером
9

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

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

Пэн Чжан
источник
Это простой способ, который я искал. Спасибо
ARSAL
6

V 35 J

текст добавлен не менее 30 символов

μBio
источник
6

v%

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

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

v}, vp, vsИ т.д.

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

:help text-objects

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

bjfletcher
источник
4

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

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

Iggy
источник
3

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

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

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

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

ReyApr
источник
1

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

mabeiyi
источник
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
SergioAraujo
источник
0

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

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

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

Йоанн Гиллард
источник