Vim语法高亮 - 从模式中排除特定文本

时间:2015-12-07 18:41:56

标签: regex vim vim-syntax-highlighting

我已在语法文件中将sqlVariablesqlString定义为

syn match   sqlVariable ":[a-z][a-z0-9_#$]*"
syn region  sqlString   start=+'+ end=+'+ contains=sqlVariable

(加上其他一些引用变体。)字符串可以包含sqlVariable,以突出显示动态代码中的绑定,例如:b1中的'select a from b where c = :b1'。 (这适用于Oracle btw。)

这一切都很好用 - 除了含有冒号的日期格式掩码的特殊烦人情况,例如

to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')

:MI和:SS被突出显示为变量,因为它们当然与我的模式匹配。

有没有办法:MI和:SS在引用的字符串中不匹配sqlVariable? (我认为只有这两种情况才会这样做。)

1 个答案:

答案 0 :(得分:1)

这有帮助吗?

syn match sqlVariable ":[a-z][a-z0-9_#$]*\ze\(\s\|'$\)"

如果后跟一个空格或:foo,然后是EOL('),它将与$匹配。

因此,:a1 :b1 and :c1将匹配:

'select * from foo where a= :a1 and b=: b1 and c = :c1'

但不符合:

to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')

希望它有所帮助。

如果没有,也许您可​​以重新考虑region定义。