在VIM中有一个正则表达式(或任何其他快捷方式),允许我交换2个单词?

时间:2013-07-09 19:26:06

标签: regex vim

我正在寻找一个允许我在两个单词之间切换的正则表达式。 (其他vim快捷方式也可以接受)

我有一长串清单:

   a.transmit
   b.receive
   c.receive
   d.transmit

我需要将每个发送实例更改为接收,并且每个接收都要更改为发送,因此它应该读取:

   a.receive
   b.transmit
   c.transmit
   d.receive

谢谢,

4 个答案:

答案 0 :(得分:5)

您可以使用Tim Pope的Abolish插件轻松完成此操作

:%S/{transmit,receive}/{receive,transmit}

答案 1 :(得分:3)

您可以这样做:

:%s/\v(transmit|receive)/\={'transmit':'receive','receive':'transmit'}[submatch(0)]/g

答案 2 :(得分:2)

是的,您可以使用表达式:

:%s/\(receive\|transmit\)/\=submatch(1) == 'receive' ? 'transmit' : 'receive'

这是非常明显的 - 如果匹配的组是receive,则表达式将评估为transmit,否则评估为receive

答案 3 :(得分:0)

没有一个命令,但如果你愿意使用sed 3次,你可以按照

的方式做一些事情。
:%s/transmit/temporaryholdervalue/g
:%s/receive/transmit/g
:%s/temporaryholdervalue/transmit/g

应切换所有值。