VIM中的Regex错过了第一次传球的两场比赛中的第二名,需要第二次传球



在Windows上使用VIM 7.4,我试图从C文件中的代码中删除括号前后的不必要的空间;示例:

copyFunc ( copyLength, sizeof ( type ) );

以下模式在闭合括号之前删除了一个空间:

:%s/(S) )/1)/g

我很惊讶地发现上述模式在上面的type之后立即删除了第一个空间,但跳过了下一个模式,在最后两个连续的闭合括号 ) )之间。

> 。
copyFunc ( copyLength, sizeof ( type) );
                                     ^
                                     Not removed on first pass

请注意,我不是在寻找解决方法。相反,我有兴趣了解这种正则行为的原因。

避免无尽的递归(并且因为这通常是有道理的),:substitute/g flag仅考虑文本尚未匹配,以在文本线上进行进一步的迭代。

您的模式中的字面 ) (S) )与闭合括号匹配;因此,它无法在进一步的迭代中再次匹配(这次为S)。

解决此问题的一种方法是结束匹配 closing括号。可以通过用ze结束匹配:

来实现A 正面的look-head ,也可以更容易(在vim中)完成。
:s/(S) ze)/1/g

相关内容

最新更新