Сопоставьте и замените весь визуальный диапазон в vim

Я хотел визуально отметить несколько строк, а затем окружить весь диапазон ‹p› и ‹/p›. После долгих возни я придумал эту заменяющую команду, которая, похоже, работает:

:'<,'>s/^\(\_.*\)\%V/<p>\1<\/p>/

Есть ли лучший способ сделать это или кто-нибудь может объяснить, почему это работает?

\_. соответствует всем символам, включая конец строки. Швы ^ (начало строки) и \%V (совпадение визуального диапазона) ведут себя странно. Например, в документации предлагается использовать два \%V для окружения выражения, но в этом нет необходимости. Отсутствие \%V или наличие только одного в начале соответствует всему буферу. Удаление ^ приводит к тому, что последняя строка сопоставляется и заменяется отдельно. $ на конце шва тоже не нужно.


person Mattias Wadman    schedule 02.10.2011    source источник


Ответы (1)


1. Используйте объемный звук

Вы можете использовать surround.vim в визуальном режиме:

s<pВвод

Например. vat (тег визуального выбора "вокруг"), s<p окружить <p>...</p>

Авария:

  • vat (визуально выберите тег; сделайте любой визуальный выбор, который вы хотите)
  • s‹ (окружить тегом), в данном случае p

2. Используйте команды ex с маркерами диапазона

Изменить: без объемного звучания вы сможете либо

:C-u'‹iВвод<p>< kbd>Esc

:'›aEnter</p>Esc

3. Используйте плагин yank и XML для вставки содержимого регистра:

Или намного проще:

dO<p>1C-r Esc

Обратите внимание, что в 1 мой подключаемый модуль XML-типа фильтра (думаю, он используется по умолчанию) автоматически предоставляет закрывающий тег (</p>), поэтому мы можем просто вставить вытянутый содержимое с помощью C-r --- даже не выходя из режима вставки!

person sehe    schedule 02.10.2011
comment
Также добавлены альтернативы без объемного звучания: IMO всегда лучше знать подход, подобный vim, прежде чем расширять его с помощью плагинов. Таким образом, вы можете делать то, что плагины не делают за вас :) - person sehe; 02.10.2011
comment
Большое спасибо! Я собирался преобразовать текстовый документ с заголовками и абзацами в HTML. Surround.vim работает довольно хорошо. Только две проблемы, сначала я получил surround.vim: Visual mode s has been removed in favor of S, поэтому вместо этого я использовал S. Во-вторых, есть ли способ не вставлять новые строки до и после и не делать отступ, как это делает S? - person Mattias Wadman; 02.10.2011
comment
@MattiasWadman: я думаю, что :he vgS должен дать вам то, что вам нужно - person sehe; 02.10.2011