首页 > 解决方案 > vim 语法关键字仅突出显示未绑定的事件

问题描述

我有一个包含以下定义的语法文件:

syn keyword pythonBuiltinFunc           __import__ abs all any
                                        \ bin bool bytearray
                                        \ callable chr classmethod compile complex
                                        \ delattr dict dir divmod
                                        \ enumerate eval
                                        \ filter float format frozenset
                                        \ getattr globals hasattr hash hex
                                        \ id input int isinstance issubclass iter
                                        \ len list locals
                                        \ map max min next
                                        \ object oct open ord pow property
                                        \ range repr reversed round
                                        \ set setattr slice sorted
                                        \ staticmethod str sum super
                                        \ tuple type vars zip
                                        \ nextgroup=pythonArgs skipwhite

next问题在于,即使该名称被引用为对象的属性(如 in ),这也会匹配(eg) 的出现obj.next,这会打乱突出显示。

虽然我可能会认为不隐藏内置名称很有用,但我不确定我是否会为有界名称购买它。

是否有人对如何应用上述定义有想法,但排除我下面提到的病理情况?我想我会在单词模式中允许空格,但在匹配中忽略它?

标签: pythonvimsyntaxsyntax-highlighting

解决方案


为了使用 Vim 的语法包含规则排除对象属性中的那些内置函数,您必须定义一个模式来检测对象;我想这是不可能的。

这样您就可以将这些关键字转换为:syntax match并向其添加后向断言以避免匹配为 的一部分obj.builtin,如下所示:

:syntax match pythonBuildinFunc "\.\@<!\<next\>"

推荐阅读