【问题标题】:Highlighting keywords beginning with colon in Vim在 Vim 中突出显示以冒号开头的关键字
【发布时间】:2013-07-02 15:55:23
【问题描述】:

我写了一个 vim 语法文件。我注意到除了以冒号 (:) 开头的关键字之外的所有关键字都被突出显示。有没有办法在 Vim 中转义冒号?

这是文件的一部分:

syn keyword actionLabel :action nextgroup=actionName skipwhite
syn keyword problemLabels :goal :init :domain
syn keyword advLabels :types
syn keyword pondLabels :observe


hi def link actionLabel     Statement
hi def link problemLabels   Statement
hi def link advLabels       Statement
hi def link pondLabels      Statement

【问题讨论】:

    标签: vim vim-syntax-highlighting


    【解决方案1】:

    来自:h :syn-define关于关键字...

    它只能包含关键字字符,根据 'iskeyword' 选项。它不能包含其他语法项。它会 只匹配一个完整的单词(没有关键字字符 赛前或赛后)。关键字“if”将匹配 "if(a=b)",但不在 "ifdef x" 中,因为 "(" 不是关键字 字符和“d”是。

    这意味着您必须为您的文件类型修改iskeyword 以包含冒号字符(ascii 58)。从 vi 默认开始,我们可以支持任何字母字符、数字、下划线或冒号:

    set iskeyword="@,48-58,_"
    

    【讨论】:

      【解决方案2】:

      最好的解决方案似乎不是使用keyword 选项,而是使用matches 选项。

      syn match pddlLabel ':[a-zA-Z0-9]\+'
      hi def link pddlLabel Statement
      

      【讨论】:

      • 这将匹配以冒号开头的 anything,而不仅仅是特定的关键字。这可能是您想要的,但请务必注意。
      • 是的,我明白了。这或多或少是我想要的。我也可以为每个显式关键字编写其中的 1 个语句,尽管我承认这很耗时。 syn matches pddlLabel1 ':action'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 2018-12-12
      相关资源
      最近更新 更多