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


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

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

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

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

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

9 191

9 ответов:

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

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

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

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

Computed solution coefficients:

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

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

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

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

чтобы сделать выбор "включительно" (выберите также кавычки, скобки или фигурные скобки), вы можете использовать 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 и т. д.

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

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