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

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

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

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

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

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

9 ответов


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

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

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

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

Computed solution coefficients:

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


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

внутри блока скобок я использую vib ("выберите внутренний блок")

внутри блока фигурных скобок вы можете использовать viB ("Капитал Б")

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

вы можете прочитать больше о выбор текстовых объектов по инструкции.


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

посмотреть :help text-objects.


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

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


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


напишите функцию 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)


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

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

"+<command>

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

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


я сделал плагин vim-textobj-quotes: https://github.com/beloglazov/vim-textobj-quotes

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

это легче понять, глядя на примеры (курсор отображается с |):

  1. перед: foo '1, |2, 3' bar; после нажатия diq: foo '|' bar
  2. перед: foo| '1, 2, 3' bar; после нажатия diq: foo '|' bar
  3. перед: foo '1, 2, 3' |bar; после нажатия diq: foo '|' bar
  4. перед: foo '1, |2, 3' bar; после нажатия daq: foo | bar
  5. перед: foo| '1, 2, 3' bar; после нажатия daq: foo | bar
  6. перед: foo '1, 2, 3' |bar; после нажатия daq: foo | bar

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

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

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


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