4

Я попытался создать сопоставление, чтобы заключить визуально выбранные абзацы в

теги:

vnoremap <silent> _p <Esc>`>a</p><Esc>`<i<p><Esc>:'<,'>s/\n\{2,}/<\/p>\r\r<p>/g<CR>

К сожалению, это отображение всегда добавляет нежелательный </p>\r\r<p> в конце выделения (то есть после </p> добавленного за последним символом в шаге 1).

Выбор не заканчивается двойным переводом строки, поэтому шаблон не должен совпадать. Что я делаю неправильно?

От ответа

Спасибо, Ромен, у меня установлен плагин объемного звучания, но это бесполезно, когда выделенный блок содержит несколько абзацев. Вышеприведенное сопоставление используется для этого случая, а не для того, чтобы заключить в него один абзац.

Мое отображение сначала добавляет </p> в конец, затем <p> в начало выделения, после чего оно должно заменять каждое вхождение двух или более разрывов строк соответствующей комбинацией закрывающего и открывающего тега.

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

2 ответа2

0

Это на самом деле не прискорбно, так как это то, что вы просите явно с помощью :'<,'>s/\n\{2,}/<\/p>\r\r<p>/g<CR> .

Визуально выбранный блок идеально помещен в <p></p> прямо перед :

Знаете ли вы о плагине объемного звучания ? Это прекрасно решает и другие проблемы. Этот плагин является обязательным при редактировании HTML.

0

После более подробного изучения документации по \% V я могу ответить на вопрос сам:

Чтобы убедиться, что весь шаблон находится внутри визуальной области, поместите \% V в начало и конец шаблона.

Таким образом, мое отображение должно быть изменено на

vnoremap <silent> _p <Esc>`>a</p><Esc>`<i<p><Esc>:'<,'>s/\%V\n\{2,}\%V/<\/p>\r\r<p>/ge<CR>:nohl<CR>

Я прошу прощения за неправильное исследование до публикации моего вопроса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .