为什么vim不像我期望的那样取代我的文字?

时间:2016-05-21 03:00:49

标签: regex vim

我的文档中有这个字符串:

subject.reset();

我正在运行这个正则表达式:

:%s/reset\(\)/doStuff\(\)/g

结果如下:

subject.doStuff()();

这个额外的括号对来自何处?我希望它看起来像这样:

subject.doStuff();

如何在vim中进行搜索和替换?

1 个答案:

答案 0 :(得分:3)

您无需在vim中转义()。尝试

:%s/reset()/doStuff()/g

:%s/reset/doStuff/g

\(\)表示在vim内捕获群组。有关捕获群组的信息,请参见 here

在您的示例中

reset\(\)实际上意味着您正在替换reset和一个捕获组(,它是空的,并且它实际上并不包含您想要的括号)。所以,基本上你只用reset替换doStuff() ..

subject.doStuff()();
         ^^      ^^
         ||    (was already here after reset and not replaced)
     reset is replaced with do Stuff()

reset之后的括号仍然存在