我可以在Vim的同一个文件中同时使用Python和SQL语法高亮显示吗?
我在Python程序中使用多行字符串进行SQL查询我可以在Vim的同一个文件中同时使用Python和SQL语法高亮显示吗?,vim,syntax-highlighting,Vim,Syntax Highlighting,我在Python程序中使用多行字符串进行SQL查询 有没有一种方法可以告诉Vim在它们内部应用不同的突出显示规则,可以使用--SQL标记?您可以在文件上尝试以下选项: setfiletype=python.sql 它为您的文件提供了这两种文件类型,并且应该应用这两种语法高亮显示 如果它适用于您,您可以将以下行添加到.vimrc以将其应用于您编辑的每个it python文件: autocmd BufRead,BufNewFile*.py setfiletype=python.sql 然而,它并没有
有没有一种方法可以告诉Vim在它们内部应用不同的突出显示规则,可以使用
--SQL
标记?您可以在文件上尝试以下选项:setfiletype=python.sql
它为您的文件提供了这两种文件类型,并且应该应用这两种语法高亮显示
如果它适用于您,您可以将以下行添加到.vimrc
以将其应用于您编辑的每个it python文件:
autocmd BufRead,BufNewFile*.py setfiletype=python.sql
然而,它并没有真正处理两个突出显示组之间的冲突…因此它可以或不可以在您的情况下工作
您还可以创建一个函数来快速切换打开缓冲区的文件类型:
function! ToggleFiletype()
if &filetype=="sql"
set filetype=python
endif
if &filetype=="python"
set filetype=sql
endif
endfunction
map <F11> <Esc>:call ToggleFiletype()<cr>
函数!ToggleFiletype()
如果&filetype==“sql”
设置filetype=python
恩迪夫
if&filetype==“python”
设置filetype=sql
恩迪夫
端功能
映射:调用ToggleFiletype()
我复制粘贴更改自:
现在,每个多行三重单引号字符串都会获得sql语法。三重双引号字符串仍然是普通字符串。我已经修改了sqlpostgres.vim,为SQL提供了绿色的细微差别来区分这两种语言,在256色的墨水池方案中,它看起来很甜美
同样相关:我知道有一个公认的答案,但仍然有另一种方法:
如果存在(“b:当前语法”)
完成
恩迪夫
“在顶层加载Python语法
runtime!syntax/python.vim
“需要让syntax/sql.vim做点什么
unlet b:当前_语法
“加载SQL语法
语法包括@SQL syntax/SQL.vim
“需要在此处添加keepend
syn区域蟒蛇串匹配组=蟒蛇串
\start=+[uU]\=\z(['“]\)+end=“\z1”skip=“\124;\\ z1”
\contains=pythonEscape,@Spell keepend
syn region pythonRawString匹配组=pythonquettes
\start=+[uU]\=[rR]\z(['“]\)+end=“\z1”skip=“\124;\\ z1”
\contains=@Spell keepend
syn region SQLEmbedded contains=@SQL containedin=pythonString,pythonRawString contained
\开始=+\v(更改|开始|调用|注释|提交|连接|创建|删除|删除|结束|解释|导出|授予|导入|插入|加载|锁定|合并|刷新|重命名|替换|撤销|回滚|选择|设置|截断|卸载|取消|更新|)+
\结束=++
让b:current_syntax=“pysql”
这样,突出显示从给定的SQL关键字之一开始,并在第一个
处停止
可以在下一个SQL关键字时重新启动,或者在python字符串末尾停止(请参见keepend
)。相反,它将SQL语法应用于python代码,并且字符串是简单的。
function! TextEnableCodeSnip(filetype,start,end,textSnipHl) abort
let ft=toupper(a:filetype)
let group='textGroup'.ft
if exists('b:current_syntax')
let s:current_syntax=b:current_syntax
" Remove current syntax definition, as some syntax files (e.g. cpp.vim)
" do nothing if b:current_syntax is defined.
unlet b:current_syntax
endif
execute 'syntax include @'.group.' syntax/'.a:filetype.'.vim'
try
execute 'syntax include @'.group.' after/syntax/'.a:filetype.'.vim'
catch
endtry
if exists('s:current_syntax')
let b:current_syntax=s:current_syntax
else
unlet b:current_syntax
endif
execute 'syntax region textSnip'.ft.'
\ matchgroup='.a:textSnipHl.'
\ start="'.a:start.'" end="'.a:end.'"
\ contains=@'.group
endfunction
au FileType python call TextEnableCodeSnip('sqlpostgres', "'''", "'''", 'SpecialComment')