假设我有一个仅包含字符和数字(没有特殊字符或标点符号)的文件,我如何使用 VIM 交换可能或可能不相邻的两个单词?
我尝试了以下方法(将所有出现的“Tom”与“Jerry”交换),但由于明显的原因它不起作用。
:%s/汤姆/杰瑞/g :%s/杰瑞/汤姆/g
谢谢你!
答案1
也许你可以使用这样的中间变量
:%s/Tom/XX9G235a65/g :%s/Jerry/Tom/g :%s/XX9G235a65/Jerry/g
答案2
这是两个变体(都使用:help sub-replace-expression
并且同样麻烦),分别使用条件运算符和字典查找:
:substitute/\<\(Tom\|Jerry\)\>/\=submatch(0) ==# 'Tom' ? 'Jerry' : 'Tom'/g
:substitute/\<\(Tom\|Jerry\)\>/\={'Tom':'Jerry', 'Jerry':'Tom'}[submatch(0)]/g
这样,您就不需要像 @MichaelDurrant 的答案那样的中间人了。