Вам нужно будет изменить и переопределить синтаксис pythonString
. Из /usr/share/vim/vim74/syntax/python.vim
:
" Triple-quoted strings can contain doctests.
syn region pythonString
\ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
\ contains=pythonEscape,@Spell
syn region pythonString
\ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend
\ contains=pythonEscape,pythonSpaceError,pythonDoctest,@Spell
syn region pythonRawString
\ start=+[uU]\=[rR]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
\ contains=@Spell
syn region pythonRawString
\ start=+[uU]\=[rR]\z('''\|"""\)+ end="\z1" keepend
\ contains=pythonSpaceError,pythonDoctest,@Spell
С помощью syn clear pythonString
вы можете очистить выделенную синтаксическую подсветку для него, а затем мы можем переопределить с помощью @SQL
, добавленного в contains
. Полагая это в ~/.vim/after/syntax/python.vim
, кажется, хорошо работает:
" SQL syntax file won't load if this is set
unlet b:current_syntax
" Load SQL syntax
syn include @SQL syntax/sql.vim
" We don't need these (a string inside a string!)
syn cluster SQL remove=sqlString,sqlComment
" Clear existing syntax
syntax clear pythonString
" Triple-quoted strings can contain SQL. This is the same as the original
" except with @SQL added in contains=
syn region pythonString
\ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
\ contains=pythonEscape,@Spell
syn region pythonString
\ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend
\ contains=pythonEscape,pythonSpaceError,pythonDoctest,@Spell,@SQL
syn region pythonRawString
\ start=+[uU]\=[rR]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
\ contains=@Spell
syn region pythonRawString
\ start=+[uU]\=[rR]\z('''\|"""\)+ end="\z1" keepend
\ contains=pythonSpaceError,pythonDoctest,@Spell,@SQL
" Re-set current syntax
let b:current_syntax = 'python'