比方说,我有一个文档,其中所有括号都被翻转:
Lorem)ipsum(dolor)坐(amet
我想纠正它:
Lorem(ipsum)dolor(坐)amet
当然我不能用两个替换进行交换; 首先用全部替换全部(,)然后全部)替换(,因为那样我最终会得到:
Lorem(ipsum(dolor(坐着)
请提供一种在vim中为任何一对字符串执行此操作的方法.
更新:
感谢ernix提供了一个很好的答案.对于那些想知道tr函数是什么的人:http:
//vimdoc.sourceforge.net/htmldoc/eval.html#tr()
使用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)