我有一个快速的问题。在给定类型的语法文件中,我有:
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无效)
答案 0 :(得分:3)
我认为
if exists("b:current_syntax")
finish
endif
表示如果存在varianle b:current_syntax
,则表示完成,不执行任何操作。因此,如果已经允许此变量,它将不执行任何操作。 asm
的原始vim语法文件可能是从其他地方读取的。尝试:verbose syntax
查看已使用语法设置的内容,并:set rtp?
查看搜索运行时文件的目录列表。
如果您希望通过将文件放在.vim/after/syntax
中来“覆盖”语法,则可以删除if语句。