Wil*_*son 5 regex vim vim-syntax-highlighting
我已经定义sqlVariable
并sqlString
在我的语法文件中
syn match sqlVariable ":[a-z][a-z0-9_#$]*"
syn region sqlString start=+'+ end=+'+ contains=sqlVariable
Run Code Online (Sandbox Code Playgroud)
(加上一些其他的引用变体.)字符串可以包含sqlVariable
,以突出动态代码中的绑定,如:b1
in 'select a from b where c = :b1'
.(这适用于Oracle顺便说一句.)
这一切都很好 - 除了包含冒号的日期格式掩码的特定烦人情况,例如
to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')
Run Code Online (Sandbox Code Playgroud)
:MI和:SS被突出显示为变量,因为它们当然与我的模式匹配.
有没有办法:MI和:SS sqlVariable
在引用的字符串中不匹配?(我认为只有这两种情况才会这样做.)
这有帮助吗?
syn match sqlVariable ":[a-z][a-z0-9_#$]*\ze\(\s\|'$\)"
Run Code Online (Sandbox Code Playgroud)
:foo
如果它们后面跟着空格或'
EOL( ) ,它将匹配它们$
。
所以,:a1 :b1 and :c1
将被匹配:
'select * from foo where a= :a1 and b=: b1 and c = :c1'
Run Code Online (Sandbox Code Playgroud)
但没有匹配:
to_char(sysdate,'YYYY-MM-DD HH24:MI:SS')
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
如果没有,也许你可以重新考虑一下这个region
定义。