2

2 つの単語を交換できる正規表現を探しています。(他の vim ショートカットも使用できます)

私は長いリストを持っています:

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

送信のすべてのインスタンスを受信に変更し、すべての受信を送信に変更する必要があるため、次のように読む必要があります。

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

ありがとう、

4

4 に答える 4

5

これは、Tim Pope のAbolishプラグインを使用して簡単に行うことができます。

:%S/{transmit,receive}/{receive,transmit}
于 2013-07-09T19:29:45.457 に答える
3

次のようなことができます。

:%s/\v(transmit|receive)/\={'transmit':'receive','receive':'transmit'}[submatch(0)]/g
于 2013-07-09T19:30:04.723 に答える
2

はい、次の式を使用できます。

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

それはかなり自明です-一致したグループがreceive式である場合は に評価されtransmit、そうでない場合は に評価されreceiveます。

于 2013-07-09T19:31:57.777 に答える
0

単一のコマンドではありませんが、sed を 3 回使用する意思がある場合は、次の行に沿って何かを実行できます。

:%s/transmit/temporaryholdervalue/g
:%s/receive/transmit/g
:%s/temporaryholdervalue/transmit/g

すべての値を切り替える必要があります。

于 2013-07-09T19:29:58.163 に答える