首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >此VimL正则表达式是什么意思?%[MRHWY]

此VimL正则表达式是什么意思?%[MRHWY]
EN

Stack Overflow用户
提问于 2017-02-06 10:52:21
回答 1查看 74关注 0票数 0

我看到一些viml代码,比如

代码语言:javascript
复制
if &foo =~# '%[MRHWY]' && &foo !~# '%[mrhwy]'

字符串'%[MRHWY]''%[mrhwy]'是什么意思?它们在=~#比较的上下文中是否意味着可能与其他上下文不同的内容?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-06 13:35:45

与集合[]匹配的区分大小写(=~#)模式。在这种情况下,它在%和可能出现在状态线中的字母集合上进行匹配。具体地说:

%[MRHWY]可以匹配'%M‘、'%R’、'%H‘、'%W’或'%Y‘。

可能会让您分心的是,正如它对我所做的那样,还有一个序列模式匹配%[],它尽可能多地匹配集合;它的例程在第一个不匹配的原子处停止(有关更多示例和详细信息,请参阅help %[] vs. [] )。然而,这里的情况并非如此,因为在%之前有一个引用,在集合前面。

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

代码语言:javascript
复制
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是只读标志,依此类推。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42059725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档