这个VimL正则表达式意味着什么? %[MRHWY]

时间:2017-02-06 02:52:21

标签: vim

我看到一些像

这样的viml代码
if &foo =~# '%[MRHWY]' && &foo !~# '%[mrhwy]'

这些字符串'%[MRHWY]''%[mrhwy]'是什么意思?它们是否意味着=~#比较的上下文可能与另一个上下文不同?

1 个答案:

答案 0 :(得分:3)

区分大小写(=~#)模式匹配集合[]。在这个例子中,它匹配%和可能出现在一个状态行中的字母集合。具体来说:

%[MRHWY]可以匹配“%M”,“%R”,“{1}}”,“%H”或“%W” 。

正如我所做的那样,可能会分散你的注意力的是,还有一个序列模式匹配%Y,它尽可能多地匹配集合;它的例程在第一个不匹配的原子处停止(有关更多示例和详细信息,请参阅帮助%[]与[])。但是,这不是这里的情况,因为在%[]之前,在集合前面有引号。

通过快速搜索,我看到这行代码在fugitive.vim包中使用,它检查字母序列'MRHWY'的状态行:

%

(顺便说一句:如果你想查看这些字母的含义,请参阅help:statusline。例如:M是修改后的文本标志,R是只读标志等。)