所以这个问题必须和编程本身一样古老。如果我有这段代码:
Arequest : A.state == IDLE & B.state == OUT -> A.state == RUNNING
A.state == IDLE & B.state == IN -> A.state == POLLING
A.state == IDLE & B.state == RUNNING -> A.state == WAITING
我要输入的下一个代码块是这个(A与B交换)
Brequest : B.state == IDLE & A.state == OUT -> B.state == RUNNING
B.state == IDLE & A.state == IN -> B.state == POLLING
B.state == IDLE & A.state == RUNNING -> B.state == WAITING
所以基本上任何foo(A,B)都变成了foo(B,A)。我如何使用VIM做到这一点?一直在寻找很多,但无济于事。 Dr Chip's Swapstrings只会交换分隔符(点,括号,空格等)之间的A和B的出现,但Arequest(要交换的字符串是较大字符串的一部分)将不会交换到Brequest中。 Tim Pope's Abolish也不会这样做(同样的原因)。
答案 0 :(得分:2)
在执行一次更改时创建一个宏,然后转到下一行并重新启动。像这样:
qq/A<CR>cwB<ESC>/B<CR>cwA<ESC>/A<CR>cwB<ESC>^jq
首次使用@q运行宏,然后重复@@直到完成
答案 1 :(得分:1)
如果您的系统有tr
命令,请使用该命令。
:%!tr AB BA
BTW,A
中的WAITING
将被替换。
答案 2 :(得分:1)
既然你提到Abolish我想我会告诉你这是怎么做的:
%S/{A,B}/{B,A}/wg
秘诀是使用w
标志,这意味着它只会改变单词。唯一缺失的部分是将Arequest
更改为Brequest
,也可以通过:Subvert
或手动更改{
}。
%S/{A,B,Arequest}/{B,A,Brequest}/wg