在 VIM 中交换单词,无需使用任何第三方插件

在 VIM 中交换单词,无需使用任何第三方插件

假设我有一个仅包含字符和数字(没有特殊字符或标点符号)的文件,我如何使用 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 的答案那样的中间人了。

相关内容