Vim语法不能正确匹配

时间:2015-11-15 11:53:47

标签: vim vim-syntax-highlighting

我有一个快速的问题。在给定类型的语法文件中,我有:

if exists("b:current_syntax")
    finish
endif

syntax keyword AssemblyInstruction ADD SUB MUL DIV
syntax keyword AssemblyInstruction LDR STR GET PUT

syntax match AssemblyComment /\v;.*$/
syntax match AssemblyRegister /\v[rR]\d+/

highlight def link AssemblyInstruction Function
highlight def link AssemblyComment Comment
highlight def link AssemblyRegister Type

let b:current_syntax="asm"

当我set syntax=asm它"正确"高亮显示ADD SUB MUL和DIV(尽管它似乎使用了预处理器而不是函数的突出显示)并且它得到了正确的注释。然而,当涉及到LDR STR GET PUT时,它并没有突出显示它们。登记册根本不会突出显示。

我的语法文件出了什么问题? (它位于.vim / syntax中,但我也尝试将其复制到.vim / after / syntax无效)

1 个答案:

答案 0 :(得分:3)

我认为

if exists("b:current_syntax")
    finish
endif

表示如果存在varianle b:current_syntax,则表示完成,不执行任何操作。因此,如果已经允许此变量,它将不执行任何操作。 asm的原始vim语法文件可能是从其他地方读取的。尝试:verbose syntax查看已使用语法设置的内容,并:set rtp?查看搜索运行时文件的目录列表。

如果您希望通过将文件放在.vim/after/syntax中来“覆盖”语法,则可以删除if语句。