如果我想要所有带有'ruby'文本而不是'myruby'的行,那么这就是我要做的。
:g/\<ruby\>/
我的问题是这里的小于和大于符号的含义是什么?我使用的唯一正则表达式是在ruby中进行编程。
同样,如果我想找到三个连续的空行,那么这就是我要做的事情
/^\n\{3}
我的问题是为什么我逃脱第一个大括号(打开大括号)但没有逃脱第二个大括号(闭合大括号)?
答案 0 :(得分:16)
Vim在正则表达式中反斜杠转义的规则并不一致。你必须逃避\{...}
的左大括号,但是[...]
根本不需要转义,捕获组是\(...\)
(逃避打开和关闭paren)。还有其他不一致之处。
值得庆幸的是,Vim允许您通过magic
设置更改此行为,即使是在正则表达式的基础上。如果将\v
放在正则表达式的开头,则转义规则会变得更加一致;除了数字,字母和下划线之外,所有内容都是“神奇的”,因此除非要插入除此之外的文字字符,否则不需要反斜杠。
然后您的第一个示例变为:g/\v<ruby>/
,您的第二个示例变为/\v^\n{3}
。有关详细信息,请参阅:h /magic
和:h /\v
。
答案 1 :(得分:13)
\<
和\>
表示单词边界。在Perl中,grep和less(名称为3 OTOH)为此使用\b
,所以我想在Ruby中也是如此。
关于你的第二个问题,整个表达式{3}
需要转义。你并没有逃避每个花括号,而是将整个事物放在一起。
有关详情,请参阅this question。
答案 2 :(得分:0)
对于你的第一个正则表达式,你也可以这样做:
:g/[^\ ]ruby\ /
这将确保您的ruby关键字前后有空格。