【问题标题】:Vim syntax not matching properlyVim 语法不正确匹配
【发布时间】:2015-11-15 11:53:47
【问题描述】:

我有一个快速的 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 它“正确”突出显示 ADD SUB MUL 和 DIV 时(尽管它似乎将突出显示用于预处理器而不是函数)并且它使 cmets 正确。但是,当涉及到 LDR STR GET PUT 时,它根本不会突出显示它们。寄存器也不突出显示。

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

【问题讨论】:

    标签: vim vim-syntax-highlighting


    【解决方案1】:

    我认为

    if exists("b:current_syntax")
        finish
    endif
    

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

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

    【讨论】:

    • 谢谢,这正是问题所在。我评论了“守卫”,它工作得很好。我检查了set rtp?,发现由于某种原因,它是在从不同目录(不是.vim/after)的文件之后加载的。
    猜你喜欢
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多