在这个(非常受欢迎的)Vim syntax file for PostgreSQL中,遵循这种模式有数千行:
syn region pgsqlFunction start="abs'(" end=")" contains=ALL
syn region pgsqlFunction start="abstime'(" end=")" contains=ALL
syn region pgsqlFunction start="abstimeeq'(" end=")" contains=ALL
...
使用Vim 7.4,这对我来说根本不起作用,除非我实际写abs'(2.3)
(这是SQL的语法错误)。在开始paren之前删除单引号可以解决问题。
由于这是Github上的一个项目,我通常只是修复错误并提交拉取请求,但由于此文件以'(
格式存在了多长时间,我犹豫不决。它在GitHub上经历了三年的29次修订,并且还可以找到该文件的其他一些版本here和here。 pgsqlFunction区域块构成了文件的绝大部分,因此很难相信没有人注意到它甚至无法工作。
这更有可能是我的问题。我可以使用这种格式,还是真的坏了?
答案 0 :(得分:2)
语法文件存在问题。无论用户设置如何,syn-region的开始和结束属性都是vim中的魔法(:h magic
)正则表达式。 (:h syn-pattern
)。根据文档的语法文件应尽可能便携,因此您的设置不应干扰文件的输出。
开始只定义模式的开始。因此,对于start="abs'("
,它必须以abs'(
开头,其中vim正则表达式与abs'(
完全匹配。
因此pgsqlFunction
突出显示语法文件已被破坏。