2009-06-29 53 views
6

如果我想要所有带有'ruby'文本但不是'myruby'的文本,那么这就是我要做的。vim的正则表达式解释

:g/\<ruby\>/ 

我的问题是小于和大于符号在这里的含义是什么?我使用的唯一正则表达式是在用Ruby进行编程时。

同样的,如果我想找到三个连续的空行,那么这是我会做什么

/^\n\{3} 

我的问题是,为什么我逃避第一个花括号(大括号),而不是逃避第二卷曲大括号(关闭大括号)?

回答

13

\<\>平均字边界。在Perl中,grep和更少(为了命名3 OTOH),您使用\b,所以我想它在Ruby中是一样的。

关于你提到的第二个问题,是需要整个表达式{3}逃逸。你不是逃避每个花括号,而是整个事情在一起。

更多见this question

0

为了您的第一个正规表达式,你也可以这样做:

:g/[^\ ]ruby\/

这将确保有一个空间之前,你的红宝石关键字之后。

+3

但这不符合在行的开始或结束处的`ruby`。 – 2009-06-29 13:23:11

+0

@Nathan好点... – samoz 2009-06-29 13:24:37

16

Vim在正则表达式中用于反斜杠转义的规则不一致。你要逃离的\{...}左括号,但[...]不需要逃避可言,并且捕获组是\(...\)(避让开,关括号)。还有其他不一致之处。

值得庆幸的Vim让你改变这种行为,即使是正则表达式,通过正则表达式的基础上,通过magic设置。如果将\v置于正则表达式的开头,转义规则会变得更加一致;除数字,字母和下划线之外,所有内容都是“神奇”的,所以除非你想插入除这些之外的文字字符,否则不需要反斜杠。

你的第一个例子就变成:g/\v<ruby>/和你的第二个例子变得/\v^\n{3}。有关更多信息,请参阅:h /magic:h /\v