我看到一些viml代码,比如
if &foo =~# '%[MRHWY]' && &foo !~# '%[mrhwy]'字符串'%[MRHWY]'和'%[mrhwy]'是什么意思?它们在=~#比较的上下文中是否意味着可能与其他上下文不同的内容?
发布于 2017-02-06 13:35:45
与集合[]匹配的区分大小写(=~#)模式。在这种情况下,它在%和可能出现在状态线中的字母集合上进行匹配。具体地说:
%[MRHWY]可以匹配'%M‘、'%R’、'%H‘、'%W’或'%Y‘。
可能会让您分心的是,正如它对我所做的那样,还有一个序列模式匹配%[],它尽可能多地匹配集合;它的例程在第一个不匹配的原子处停止(有关更多示例和详细信息,请参阅help %[] vs. [] )。然而,这里的情况并非如此,因为在%之前有一个引用,在集合前面。
通过快速搜索,我发现在fugitive.vim包中使用了这行代码,它在状态行中检查字母序列'MRHWY':
function! fugitive#statusline(...) abort
if !exists('b:git_dir')
return ''
endif
let status = ''
if s:buffer().commit() != ''
let status .= ':' . s:buffer().commit()[0:7]
endif
let status .= '('.fugitive#head(7).')'
if &statusline =~# '%[MRHWY]' && &statusline !~# '%[mrhwy]'
return ',GIT'.status
else
return '[Git'.status.']'
endif
endfunction (顺便说一句:如果您想了解这些字母各自的含义,请参阅help :statusline。例如:M是修改的文本标志,R是只读标志,依此类推。)
https://stackoverflow.com/questions/42059725
复制相似问题