gpt4 book ai didi

vim - 突出显示 Python 字符串文字中的 SQL

转载 作者:行者123 更新时间:2023-12-04 17:07:51 24 4
gpt4 key购买 nike

我有一些 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 被突出显示。

你能在我的语法文件中找到错误吗?

最佳答案

我在 https://github.com/krisajenkins/vim-java-sql/blob/master/after/syntax/java.vim 找到了提示.我的语法不起作用的原因是因为它干扰了 sql.vim 中的 sqlString 组。我按如下方式更改了语法,现在效果很好:

if exists("b:current_syntax")
finish
endif

" Load Python syntax at the top level
runtime! syntax/python.vim
unlet b:current_syntax

" Load SQL syntax
syn include @SQL syntax/sql.vim

" Reference: https://github.com/krisajenkins/vim-java-sql/blob/master/after/syntax/java.vim
" Take care not to consume the double-quotes (\zs & \ze)
" Case-insensitive (no \C)
syn region SQLEmbedded start=+\z(['"]\)\zs[\s\n]*\v(ALTER|CALL|COMMENT|COMMIT|CONNECT|CREATE|DELETE|DROP|EXPLAIN|EXPORT|GRANT|IMPORT|INSERT|LOAD|LOCK|MERGE|REFRESH|RENAME|REPLACE|REVOKE|ROLLBACK|SELECT|SET|TRUNCATE|UNLOAD|UNSET|UPDATE|UPSERT)+ skip=+\\\z1+ end=+\ze\z1+ contains=@SQL containedin=pythonString

let b:current_syntax = "pysql"

关于vim - 突出显示 Python 字符串文字中的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29791199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com