Vim 语法高亮 - 从模式中排除特定文本
Vim syntax highlighting - exclude specific text from a pattern
我在语法文件中将 sqlVariable
和 sqlString
定义为
syn match sqlVariable ":[a-z][a-z0-9_#$]*"
syn region sqlString start=+'+ end=+'+ contains=sqlVariable
(加上一些其他引用变体。)字符串可以包含 sqlVariable
以突出显示动态代码中的绑定,例如 'select a from b where c = :b1'
中的 :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
如果它们后面跟着白色 space 或 '
然后是 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
定义。
我在语法文件中将 sqlVariable
和 sqlString
定义为
syn match sqlVariable ":[a-z][a-z0-9_#$]*"
syn region sqlString start=+'+ end=+'+ contains=sqlVariable
(加上一些其他引用变体。)字符串可以包含 sqlVariable
以突出显示动态代码中的绑定,例如 'select a from b where c = :b1'
中的 :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
如果它们后面跟着白色 space 或 '
然后是 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
定义。