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

StackOverflow https://stackoverflow.com/questions/1061933

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Computed solution coefficients:

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

Другие советы

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

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

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

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

Вы можете прочитать больше о Выделение текстовых объектов в руководстве, или :help text-objects в vim.

Этот метод выбора встроен и хорошо описан в справке 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 с ”lvf”hh Приведенная выше команда сопоставляет viq с ключами для поиска между кавычками.Замените " любым символом и создайте свои ключевые карты.Вставьте это в vimrc во время запуска, и вы сможете использовать его каждый раз.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top