Dưới đây là một lớp lót:
:%s/{\_.\{-}}/\=substitute(submatch(0), '\n', '', 'g')/
\_.
phù hợp với bất kỳ ký tự, bao gồm cả một dòng mới, và \{-}
là phiên bản không tham lam của *
, vì vậy {\_.\{-}}
phù hợp với tất cả mọi thứ giữa một cặp kết hợp của dấu ngoặc nhọn, toàn diện .
Các \=
cho phép bạn thay thế kết quả của một biểu thức vim, mà chúng tôi ở đây sử dụng để loại bỏ tất cả các dòng mới '\n'
từ các văn bản phù hợp (trong submatch(0)
) bằng cách sử dụng chức năng substitute()
.
Điều ngược lại (chuyển đổi các phiên bản một dòng để đa dòng) cũng có thể được thực hiện như một liner:
:%s/{\_.\{-}}/\=substitute(submatch(0), '[{;]', '\0\r', 'g')/
+1 cảm ơn câu hỏi. học được rất nhiều từ câu trả lời của hung hăng! –
Xin vui lòng, hãy xem lệnh tôi đề xuất trong câu trả lời của tôi [dưới đây] (http://stackoverflow.com/a/10797846/254635). Bình luận cho câu trả lời được hoan nghênh! –