0

我正在尝试为 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我正在构建自己的方案来突出显示方法,因为我之前使用方法很慢,特别是方法签名匹配很慢,我做了一个简化来表明这一点。我怀疑这可能是因为上面的问题。复杂的内部规则无处不在。

4

1 回答 1

1

你的预感是对的,这是由于contained=ALLBUT. 重用现有语法是有限制的。尽管您可以尝试覆盖或覆盖:syntax clear某些元素,但有时这会变得过于乏味。

如果原始语法作者仍在维护他的语法,您可以讨论这一点,并提交补丁以简化集成,或者甚至可以完全分离出一个通用的子语法,然后您可以使用该子语法作为您的基础。如果不是这种情况,或者不希望耦合,您最好开始创建自己的、完全独立的语法,即使这意味着一些重复。

于 2013-05-28T10:37:43.863 回答