Here's a one-liner:
:%s/{\_.{-}}/=substitute(submatch(0), '
', '', 'g')/
\_.
matches any character, including a newline, and {-}
is the non-greedy version of *
, so {\_.{-}}
matches everything between a matching pair of curly braces, inclusive.
The =
allows you to substitute the result of a vim expression, which we here use to strip out all the newlines '
'
from the matched text (in submatch(0)
) using the substitute()
function.
The inverse (converting the one-line version to multi-line) can also be done as a one liner:
:%s/{\_.{-}}/=substitute(submatch(0), '[{;]', '
', 'g')/
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…