我一直在尝试在vim中进行简单替换,发现\?
在*
或+
中不起作用,说(NFA regexp) Can't have a multi follow a multi
,在vim中:
i want it to stop here, not here
~
~
~
[NORMAL] ...
:%s/^\(.*\?\)here//
如果我删除\?
可以使用,但是它的正则表达式最多匹配第二个here
。
但是使用常规正则表达式,它可以工作:https://regex101.com/r/iHdxxl/1
为什么在Vim中无法将\?
或*
与\+
一起使用?
答案 0 :(得分:3)
如there所述,您不能在星号后的vim中添加?
字符。
要使搜索变得不贪心,您需要使用.\{-}
而不是.*
:
:%s/\(.\{-}\)here//
答案 1 :(得分:2)
另一种选择是使用负前瞻:
Rename Master
:%s/\v^((here)@!.)* here//
用于非常魔术,以避免在正则表达式中转义。