Як вибрати між дужками (або лапками чи…) у Vim?


220

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

Який найпростіший спосіб вибрати між дужками або цитатами або загалом списком відповідних символів?

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

Наприклад, тут я хотів би вибрати (a), або Computed solution coefficients:.

Мене не цікавлять багатолінійні, просто випадки, які трапляються на одній лінії.

Відповіді:


277

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

Я спробував це з подвійними та одинарними цитатами, і, здається, він працює і там. Для ваших даних я роблю:

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

Перемістіть курсор на C, а потім наберіть yi'. Перемістіть курсор на порожній рядок, натисніть pта дістаньте

Computed solution coefficients:

Як зазначив CMS , це працює для візуального вибору режиму, а - просто використовувати vi), vi}, vi'і т.д.


1
Я, як правило, шукаю спосіб вибрати все між попередньо визначеними відповідними символами (як правило, лише одинарні та подвійні лапки та дужки усіх видів).
Грак

2
Що ви маєте на увазі під відокремленими словами? Я спробував це на "[x, y, z]", і він вибрав "x, y, z"
Тім Віткомб

4
Нехтуйте останнім коментарем - знайшли, в чому проблема. Працює як принадність :-)
Лад

Здається, працює з цитатами, а також yi"вибирайте всі цитати,
stefanB

ci(або ci)робить це для того, що я шукав. Дякую. Я все ще не повністю розумію цього iв цьому випадку, але кого все одно, як це працює, правда? :)
justnorris

279

Для вибору між одинарними цитатами я зазвичай роблю vi' ("виберіть внутрішні одиничні лапки").

Всередині блоку дужок я використовую vib ("вибрати внутрішній блок")

Всередині блоку фігурних дужок можна використовувати viB(" велика Б")

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

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


дякую за цю пораду, я шукав і просив щось подібне і не був задоволений своїми результатами. Дивовижно.
alfredodeza

цю пораду дуже просто і легко зробити всередині моєї пам’яті мозку та м’язів. Дякую.
Газалій

Це дуже корисна порада. Більше не махати зайвими натисканнями клавіш. Дякую за посилання
Рай

27

Цей спосіб відбору є вбудованим і добре висвітлюється у довідці Vim. Він охоплює теги XML тощо.

Див :help text-objects.


1
: допоможіть текстовим об’єктам наблизитись до корисних речей ... ви могли б принаймні згадати деякі поширені, як-от "і a" (у візуальному режимі.
Stobor

2
(Також +1, тому що, незважаючи на те, що давно користувач vim, я про них не знав!)
Stobor

@Stobor Ура виправили цю посилання
Майкл

21

Для вибору в межах однієї лапки використовуйте vi'.

Для вибору в дужках використання vi(.


3
Примітка: ci'або ci(для зміни замість візуального вибору. Але це робить саме те, що я хотів. Дякую :)
justnorris

Другий працює лише тоді, коли всередині цього () блоку, тому зазвичай роблю %vi(або%vib
816-8055

7

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


5
(цитати, на жаль, не роблять ...)
Stobor

3

Запишіть функцію 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

Я додам детальну інформацію до найбільш проголосованої відповіді:

Якщо ви використовуєте gvim і хочете скопіювати його у буфер обміну, використовуйте

"+<command>

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

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


2
Це повністю ортогонально проблемі і не повинно бути відповіддю. Ви можете написати це на кожне запитання y.
труба

Це доповнення до відповіді, а не сама відповідь.
yuriploc

Тоді слід змінити цю відповідь, ця публікація як є не відповідає на питання.
труба

Це реклама для НЕ використання gvim :) Кому потрібні додаткові дві зміни + натискання клавіш у їхньому житті?
Пол Паркер

1

Я зробив плагін 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 для отримання більш детальної інформації.


-6

Проста клавішна карта vim вирішила б це питання. map viq F ”lvf” hh Ця вище команда відображає viq до клавіш для пошуку між цитатами. Замініть "будь-яким символом і створіть ваші ключові карти. Вставте це у vimrc під час запуску, і ви повинні мати можливість користуватися ним щоразу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.