交换所有出现的两个字符串

Eya*_*lAr 0 vim

比方说,我有一个文档,其中所有括号都被翻转:

Lorem)ipsum(dolor)坐(amet

我想纠正它:

Lorem(ipsum)dolor(坐)amet

当然我不能用两个替换进行交换; 首先用全部替换全部(,)然后全部)替换(,因为那样我最终会得到:

Lorem(ipsum(dolor(坐着)

请提供一种在vim中为任何一对字符串执行此操作的方法.

更新:
感谢ernix提供了一个很好的答案.对于那些想知道tr函数是什么的人:http:
//vimdoc.sourceforge.net/htmldoc/eval.html#tr()

ern*_*nix 5

使用vimscript:

:%call setline(".", tr(getline("."), "()", ")("))
Run Code Online (Sandbox Code Playgroud)

或者直接致电tr:

:%!tr ')(' '()'
Run Code Online (Sandbox Code Playgroud)

更新

如果你考虑一下白色空间,肯特的回答是最好的:)

%s/\(\s*\((\|)\)\s*\)/\=substitute(submatch(0),submatch(0),submatch(2)=='('?') ':' (', 'g')/g
Run Code Online (Sandbox Code Playgroud)