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