Как выбрать между скобками (или кавычками или ...) в Vim? - PullRequest
204 голосов
/ 30 июня 2009

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

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

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

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

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

Ответы [ 9 ]

258 голосов
/ 30 июня 2009

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

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

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

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

Computed solution coefficients:

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

241 голосов
/ 30 июня 2009

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

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

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

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

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

27 голосов
/ 30 июня 2009

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

См. :help text-objects.

20 голосов
/ 30 июня 2009

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

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

7 голосов
/ 30 июня 2009

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

3 голосов
/ 30 июня 2009

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

2 голосов
/ 09 февраля 2017

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

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

"+<command>

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

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

1 голос
/ 09 апреля 2014

Я сделал плагин 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, указанную выше.

0 голосов
/ 30 июля 2009

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

...