我正在寻找一个允许我在两个单词之间切换的正则表达式。 (其他vim快捷方式也可以接受)
我有一长串清单:
a.transmit
b.receive
c.receive
d.transmit
我需要将每个发送实例更改为接收,并且每个接收都要更改为发送,因此它应该读取:
a.receive
b.transmit
c.transmit
d.receive
谢谢,
答案 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
应切换所有值。