''(在Vim语法区域中有什么特别之处,特别是在pgsql.vim中?

时间:2014-11-08 00:56:33

标签: postgresql vim syntax

在这个(非常受欢迎的)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次修订,并且还可以找到该文件的其他一些版本herehere。 pgsqlFunction区域块构成了文件的绝大部分,因此很难相信没有人注意到它甚至无法工作。

这更有可能是我的问题。我可以使用这种格式,还是真的坏了?

1 个答案:

答案 0 :(得分:2)

语法文件存在问题。无论用户设置如何,syn-region的开始和结束属性都是vim中的魔法(:h magic)正则表达式。 (:h syn-pattern)。根据文档的语法文件应尽可能便携,因此您的设置不应干扰文件的输出。

开始只定义模式的开始。因此,对于start="abs'(",它必须以abs'(开头,其中vim正则表达式与abs'(完全匹配。

因此pgsqlFunction突出显示语法文件已被破坏。