我看到一些像
这样的viml代码if &foo =~# '%[MRHWY]' && &foo !~# '%[mrhwy]'
这些字符串'%[MRHWY]'
和'%[mrhwy]'
是什么意思?它们是否意味着=~#
比较的上下文可能与另一个上下文不同?
答案 0 :(得分:3)
区分大小写(=~#
)模式匹配集合[]
。在这个例子中,它匹配%
和可能出现在一个状态行中的字母集合。具体来说:
%[MRHWY]
可以匹配“%M
”,“%R
”,“{1}}”,“%H
”或“%W
” 。
正如我所做的那样,可能会分散你的注意力的是,还有一个序列模式匹配%Y
,它尽可能多地匹配集合;它的例程在第一个不匹配的原子处停止(有关更多示例和详细信息,请参阅帮助%[]与[])。但是,这不是这里的情况,因为在%[]
之前,在集合前面有引号。
通过快速搜索,我看到这行代码在fugitive.vim包中使用,它检查字母序列'MRHWY'的状态行:
%
(顺便说一句:如果你想查看这些字母的含义,请参阅help:statusline。例如:M是修改后的文本标志,R是只读标志等。)