.
соответствует только обычным символам, но не новым строкам. Поскольку ваш HTML-тег занимает несколько строк, совпадений нет. Используйте атом \_.
вместо(:help /\_.
). \1
внутри замены, но на самом деле не фиксируете его. Для этого вложите в\(...\)
:*
будет соответствовать первому начальному тегу и последнему конечному тегу, остальные теги будут поглощены в группе захвата., так что это будет работать только с одним вхождением. Чтобы изменить все вхождения, используйтене -жадноесовпадение, заменив *
на \{-}
. (Или используйте второй вариант.):%s/<div class="subSectionTitle">\(\_.\{-}\)<\/div>/<h1>\1<\/h1>/g
Кроме того, вы можете просто сопоставить начальный и конечный теги по отдельности. (В любом случае, даже исходное одиночное совпадение не справилось бы с заменой соответствующего закрывающего тега в случае вложенных тегов. )Вместо того, чтобы фиксировать разные начала начального и конечного тегов, я запускаю фактическое совпадение через специальный атом /\zs
.
:%s/<\zsdiv class="subSectionTitle">\|<\/zsdiv>/h1>/g