【发布时间】:2015-06-29 17:38:43
【问题描述】:
我有一些 Python 文件,我想在其中突出显示字符串文字中的 SQL 查询。假设这些文件中的所有字符串文字都包含 SQL 查询。
我将以下语法文件保存为 pysql.vim:
if exists("b:current_syntax")
finish
endif
" Include Python syntax
runtime! syntax/python.vim
unlet b:current_syntax
syn include @SQL syntax/sql.vim
syn region SQLEmbedded start=+'+ end=+'+ contains=@SQL
syn region SQLEmbedded start=+%+ end=+%+ contains=@SQL
let b:current_syntax = "pysql"
我添加了百分号语法以检查它是否有效。
加载以下 python 文件(忽略第一行在 Python 中无效的事实):
a = %select * from mytab%
b = 'select * from mytab'
然后运行 vim 命令set syntax=pysql。它适用于百分号内的 SQL 查询,但不适用于引号。奇怪的是,字符串文字后面的任何单词都被突出显示为 SQL。例如,'1' select * from mytab '2' 中的 select * from mytab 会突出显示。
你能在我的语法文件中找到错误吗?
【问题讨论】:
-
我不确定如何修复,但
'1' select * from mytab '2'中的select * from mytab忽略了'1'中的1和2,因为它们不是与select ...匹配的 SQL在 1 之后和 2 之前使用' -
但是使用
'select * from mytab' select * from mytab 'select * from mytab',中间的SQL查询(字符串文字之外)被突出显示。
标签: vim vim-syntax-highlighting