Вот одна строка:
:%s/{\_.\{-}}/\=substitute(submatch(0), '\n', '', 'g')/
\_.
соответствует любому символу, включая символ новой строки, а \{-}
- не жадная версия *
, поэтому {\_.\{-}}
соответствует всему между соответствующей парой фигурных скобок включительно.
\=
позволяет вам заменить результат выражения vim, которое мы здесь используем, чтобы вырезать все новые строки '\n'
из сопоставленного текста (в submatch(0)
), используя функцию substitute()
.
Обратное (преобразование однострочной версии в многострочную) также может быть выполнено как однострочный:
:%s/{\_.\{-}}/\=substitute(submatch(0), '[{;]', '\0\r', 'g')/