Vim 语法不正确匹配

Vim syntax not matching properly

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

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 它 "correctly" 突出显示 ADD SUB MUL 和 DIV (尽管它似乎是对预处理器而不是函数使用突出显示)并且它得到正确的注释。但是,当涉及到 LDR STR GET PUT 时,它根本不会突出显示它们。寄存器也不突出显示。

我的语法文件有什么问题? (它位于 .vim/syntax 但我也尝试将其复制到 .vim/after/syntax 无济于事)

我认为

if exists("b:current_syntax")
    finish
endif

是说如果 varianle b:current_syntax 存在,则完成,什么也不做。所以如果这个变量已经被 let 了,它什么都不做。 asm 的原始 vim 语法文件可能是从其他地方读取的。尝试 :verbose syntax 查看已使用语法设置的内容,并尝试 :set rtp? 搜索运行时文件的目录列表。

如果您想 "overwrite" 将文件放入 .vim/after/syntax 的语法,您可以删除 if 语句。