Как выбрать между скобками (или кавычками или...) в Vim?

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

Каков самый простой способ выбора между скобками или кавычками или, как правило, список совпадающих символов?

   write ( *, '(a)' ) 'Computed solution coefficients:'

Например, здесь я хотел бы выбрать (a) или Computed solution coefficients:.

Мне не интересны многострочные, просто случаи, которые встречаются в одной строке.

Ответ 1

Используйте любую клавишу навигации, которую вы хотите получить в круглых скобках, тогда вы можете использовать либо yi(, либо yi), чтобы скопировать все, что находится в соответствующих парах. Это также работает с квадратными скобками (например, yi]) и фигурными фигурными скобками. В дополнение к y вы также можете удалить или изменить текст (например, ci), di]).

Я попробовал это с двойными и одинарными кавычками и, похоже, там тоже работает. Для ваших данных я:

write (*, '(a)') 'Computed solution coefficients:'

Переместите курсор на C, затем введите yi'. Переместите курсор на пустую строку, нажмите p и получите

Computed solution coefficients:

Как CMS отметил, это работает и для выбора визуального режима - просто используйте vi), vi}, vi' и т.д.

Ответ 2

Чтобы выбрать между одинарными кавычками, я обычно делаю vi' ( "выберите внутренние одинарные кавычки" ).

Внутри блока скобок я использую vib ( "select internal block" )

Внутри фигурного блока фигурных скобок вы можете использовать vib ( "capital B" )

Чтобы сделать выбор "включительно" (выберите также кавычки, скобки или фигурные скобки), вы можете использовать a вместо i.

Подробнее о Выбор текстовых объектов в руководстве.

Ответ 3

Этот метод выбора встроен и хорошо освещен в справке Vim. Он охватывает теги XML и многое другое.

См. :help text-objects.

Ответ 4

Для выбора в одинарных кавычках используйте vi'.

Для выбора в скобках используйте vi(.

Ответ 5

Используйте стрелки или hjkl, чтобы перейти к одному из выражений брекетинга, затем v, чтобы выбрать визуальный (например, режим выбора), затем %, чтобы перейти к другому скобку.

Ответ 6

Напишите функцию Vim в .vimrc, используя встроенную функцию searchpair:

searchpair({start}, {middle}, {end} [, {flags} [, {skip}
            [, {stopline} [, {timeout}]]]])
    Search for the match of a nested start-end pair.  This can be
    used to find the "endif" that matches an "if", while other
    if/endif pairs in between are ignored.
    [...]

(http://vimdoc.sourceforge.net/htmldoc/eval.html)

Ответ 7

Я создал плагин vim-textobj-quotes: https://github.com/beloglazov/vim-textobj-quotes

Он предоставляет текстовые объекты для ближайших пар кавычек любого типа. Используя только iq или aq, вы можете управлять содержимым одиночных ('), двойных (") или обратных (`) кавычек, которые в настоящее время окружают курсор, перед курсором или сзади ( в этом порядке предпочтения). Иными словами, он перескакивает вперед или назад, когда это необходимо для достижения котировок.

Это проще понять, посмотрев примеры (курсор показан с помощью |):

  • До: foo '1, |2, 3' bar; после нажатия diq: foo '|' bar
  • До: foo| '1, 2, 3' bar; после нажатия diq: foo '|' bar
  • До: foo '1, 2, 3' |bar; после нажатия diq: foo '|' bar
  • До: foo '1, |2, 3' bar; после нажатия daq: foo | bar
  • До: foo| '1, 2, 3' bar; после нажатия daq: foo | bar
  • До: foo '1, 2, 3' |bar; после нажатия daq: foo | bar

Приведенные выше примеры приведены для одиночных кавычек, плагин работает точно так же, как и для двойных (") и обратных (`) кавычек.

Вы также можете использовать любые другие операторы: ciq, diq, yiq, viq и т.д.

Пожалуйста, просмотрите приведенную выше страницу github для более подробной информации.

Ответ 8

Я бы добавил деталь к самому проголосовавшему ответу:

Если вы используете gvim и хотите скопировать в буфер обмена, используйте

"+<command>

Чтобы скопировать все содержимое между скобками (или парсерами или фигурными скобками)

Например: "+yi} скопирует в буфер обмена весь контент между фигурными скобками вашего курсора.

Ответ 9

Простая комбинация клавиш в vim решит эту проблему.   map viq F "lvf" hh Эта команда отображает viq на ключи для поиска между кавычками. Замените "любым символом и создайте свои раскладки. Вставьте это в vimrc во время запуска, и вы сможете использовать его каждый раз.