我正在尝试为vim构建自己的Objective-C突出显示方案。问题是,当我使用contained
定义某个规则时,即使没有包含此规则的规则,它仍然会被应用。我在objc.vim中有这个用于测试目的:
syntax clear
runtime! syntax/c.vim
syn match firstComponent "[_A-Za-z0-9()]*:" contained
hi link firstComponent Function
我怀疑这是因为c.vim有很多contained=ALLBUT
的规则,因此它们也包括我的规则。有办法解决这个问题吗?
感谢。
PS我正在构建自己的方案来突出显示方法,因为我之前使用的one很慢,特别是方法签名匹配很慢,我做了一个减少,显示了这一点。我怀疑这可能是因为上面的问题。复杂的内部规则随处可见。
答案 0 :(得分:1)
你的预感是正确的,这是contained=ALLBUT
所致。重用现有语法是有限制的。虽然您可以尝试覆盖或:syntax clear
某些元素,但有一点会变得过于繁琐。
如果原始语法作者仍在维护他的语法,你可以讨论这个,并提交补丁以简化集成,或者甚至完全拆分一个常用的子语法,然后你可以用它来建立你的语法。如果不是这种情况,或者耦合是不受欢迎的,那么最好开始创建自己的,完全独立的语法,即使这意味着一些重复。