这里是单线:
:%s/{\_.\{-}}/\=substitute(submatch(0), '\n', '', 'g')/
\_.
匹配任何字符,包括换行符,并且\{-}
是的非贪婪版本*
,因此{\_.\{-}}
匹配匹配的一对花括号之间的所有字符(包括首尾)。
在\=
允许替换Vim表达式,我们在这里用它来去掉所有换行符的结果'\n'
从匹配的文本(在submatch(0)
使用)substitute()
功能。
逆运算(将单行版本转换为多行版本)也可以作为一个衬套来完成:
:%s/{\_.\{-}}/\=substitute(submatch(0), '[{;]', '\0\r', 'g')/