微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式 – Vim语法高亮 – 从模式中排除特定文本

我在我的语法文件中定义了sqlVariable和sqlString

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顺便说一句.)

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

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

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

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

解决方法

这有帮助吗?

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

它将匹配那些:foo如果它们后跟一个空格或’那么EOL($).

所以,:a1:b1和:c1将匹配:

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

但没有匹配:

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

希望能帮助到你.

如果没有,也许您可​​以重新考虑区域定义.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐