Выделение текста внутри скобок вне скобок в Vim - PullRequest
12 голосов
/ 18 октября 2011

Я знаю, что могу выделить текст внутри кавычек / двойных кавычек, набрав vi' или vi". Например, с курсором на H я могу выбрать World, выдав vi"

Hello "World"

Но, похоже, это не сработало, если бы у меня было

Hello (World)

Если мой курсор находится на H и я пытаюсь выбрать World с помощью vi), он не работает. Кажется, единственный способ сделать это - переместить курсор в круглые скобки и ввести vi). Почему выделение текста внутри) и "отличается таким образом?

Ответы [ 2 ]

26 голосов
/ 18 октября 2011

Разница между {a, i} × {(, ), b} командами текстового объекта и их ", ', ` аналогами в основном обусловленаразличные определения блока и строки в кавычках (см. :help v_ab, :help v_aquote).

В то время как последний является текстом из предыдущего символа кавычки наот текущей строки до следующей в той же строке (исключая их в стороне), первая строка - это текст между n-й предыдущей несопоставленной открывающей скобкой и соответствующей ей закрывающей скобкой.Проще говоря, команда va( (без счетчика) похожа на [(v% - если перед курсором нет непрописанных скобок, оба ничего не выбирают.Однако команда va" сканирует текущую строку, чтобы найти совпадающую пару кавычек.

Основная причина такого различия в поведении, я полагаю, заключается в том, что строки в кавычках, в отличие от скобок, предполагаютсябыть не вложенным (по крайней мере, с точки зрения встроенных текстовых объектов Vim).

Чтобы выделить текст в следующей скобке в текущей строке, можно использовать

%vi(

или

%va(

для включения скобок в выборку.

1 голос
/ 18 октября 2011

Этот комментарий к Hacker News указывает на сценарий, предположительно решающий проблему.

Не проверено, но это от Стива Лоша, так что это может быть хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...