Vim中的多行正则表达式支持


116

我注意到用于跨多行匹配的标准正则表达式语法是使用/ s,如下所示:

This is\nsome text
/This.*text/s

例如,这在Perl中有效,但在Vim中似乎不受支持。相反,我必须更加具体:

/This[^\r\n]*[\r\n]*text/

我找不到为什么要这么做,所以我想我可能只是错过了vim帮助中的相关内容。

谁能以一种方式或另一种方式确认这种行为?

Answers:


176

是的,//sVim正则表达式上没有Perl的修饰符。有关:h perl-patterns详细信息以及Vim和Perl正则表达式之间其他差异的列表,请参见。

相反,您可以使用\_.,这意味着“匹配包括换行符在内的任何单个字符”。比您所拥有的要短一些。请参阅:h /\_.

/This\_.*text/

4
很好-我的生活变得轻松多了。我一直在做(。| \ n)*
ojrac 2010年

2
正斜杠在:h /\_.做什么?我的意思是,我知道它有效,但是为什么:h /\_.有效,而不是有效:h \_.
2012年

2
@Eddified正斜杠(这是搜索的默认键)指定了\_.您可以阅读的上下文,例如:给我提供搜索表达式的 帮助\_.
Florian

但是,即使我将其包含在括号中,我似乎也无法对此表达式执行延迟匹配?有什么办法吗?
xji

2
@JIXiang如需参加懒人比赛foo bar \n foo baz \n foo,请尝试/foo\_.\{-}foo
James M. Lay
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.