在vim上将项目设置为更高的突出显示优先级

时间:2014-12-29 01:21:41

标签: vim vim-syntax-highlighting

我希望非ascii字符显示为here,但是当非ascii字符在注释中时,语法高亮消失。稍微调查一下这个问题,我在vim-manual上发现,先前启动的项目具有更高的优先级(第3项)。来自help :syn-priority

  

当多个语法项可能匹配时,将使用以下规则:

     
      
  1. 当多个匹配或区域项目在同一位置开始时,最后定义的项目具有优先权。

  2.   
  3. 关键字优先于匹配和区域项目。

  4.   
  5. 从较早位置开始的项目优先于在以后位置开始的项目。
  6.   

我目前正在使用这个:

syntax match nonascii "[^\x00-\x7F]" 
highlight nonascii cterm=underline ctermfg=red ctermbg=none term=underline

我尝试使用选项nextgroup

给予nonascii匹配项更高的优先级
syntax match nonascii "[^\x00-\x7F]" nextgroup=Comment

contains选项:

syntax match nonascii "[^\x00-\x7F]" contains=ALL

但它不起作用。我还尝试暂时禁用评论(highlight clear Comment)而没有达到预期的效果(我的评论没有突出显示,但是nonascii继续没有突出显示)。我错过了什么?

2 个答案:

答案 0 :(得分:7)

是的,您的自定义语法组不匹配,因为已经匹配了评论(或现有语法脚本中的其他语法元素)。

解决方案是告诉Vim您的nonascii群组是containedin这些群组,以便Vim也会尝试匹配(而不仅仅是在未着色的顶层)。令其复杂化的是注释的语法组取决于语法脚本,因此取决于文件类型(命名非常规则)。在以下示例中,我使用了C和Vimscript文件的名称:

:syntax match nonascii "[^\x00-\x7F]" containedin=cComment,vimLineComment

答案 1 :(得分:1)

有人已经回答了这个问题。但是,对于仍然存在问题的其他人,这里是另一种解决方案,以突出显示评论中的非ascii字符(或问题中的任何组)。这不是最好的,但它是一个临时修复。

有人可能会尝试:

:syntax match nonascii "[^\u0000-\u007F]" containedin=ALL contained |
            \ highlight nonascii ctermfg=yellow guifg=yellow

它非常接近原始实现和其他解决方案。您甚至可以删除contained,但是,从文档中,可能存在递归自身的潜在问题(据我所知)。要查看其他已定义的模式,syn-contains部分将包含它。

:help syn-containedin
:help syn-contains