2011-02-02 6 views

cevap

10

here kopya-yapıştırılan-değiştirdi: Şimdi

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.'" 
    \ [email protected]'.group 
endfunction 

au FileType python call TextEnableCodeSnip('sqlpostgres', "'''", "'''", 'SpecialComment') 

her satırlı üçlü tek alıntı dizesi sql sözdizimini alır. Üçlü çift tırnaklı dizgiler hala düz. Ben sqlpostgres.vim iki dil ayırt etmek için yeşil nüansları vermek için değiştirdim ve 256 renk inkpot düzeninde tatlı görünüyor.

İlgili diğer konular: Embedded syntax highligting in Vim

+0

Tamam, yeşil berbat, ama fikir şu ki bu ses –

+0

Bunu nasıl kullanırım? – skyler

1

Sen dosya üzerinde aşağıdaki seçeneği deneyebilirsiniz. sizin için çalışıyorsa

, düzenlemek her onu piton dosyasına uygulamak için .vimrc aşağıdaki satırı ekleyebilirsiniz:

autocmd BufRead,BufNewFile *.py setfiletype=python.sql

Ancak, gerçekten arasındaki çatışma ile uğraşmaz İki vurgu grubu ... Bu yüzden davasında işe yarayamazdı ya da işe yaramazdı.

hızlı şekilde açık tampon filetype geçiş yapmak için bir işlev yaratabilecek

: Ben

function! ToggleFiletype() 
    if &filetype=="sql" 
    set filetype=python 
    endif 

    if &filetype=="python" 
    set filetype=sql 
    endif 
endfunction 

map <F11> <Esc>:call ToggleFiletype()<cr> 
+0

au contraire, python koduna sql sözdizimini uygular ve dizeler düzdür. –

1

ben kabul edilen bir yanıt var biliyorum, ama yine de burada bunu yapmanın başka bir yoludur: aldığımızda

if exists("b:current_syntax") 
    finish 
endif 

" Load Python syntax at the top level 
runtime! syntax/python.vim 

" Needed to make syntax/sql.vim do something 
unlet b:current_syntax 

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

" Need to add the keepend here 
syn region pythonString matchgroup=pythonQuotes 
     \ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1" 
     \ contains=pythonEscape,@Spell keepend 
syn region pythonRawString matchgroup=pythonQuotes 
     \ start=+[uU]\=[rR]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1" 
     \ [email protected] keepend 

syn region SQLEmbedded [email protected] containedin=pythonString,pythonRawString contained 
    \ start=+\v(ALTER|BEGIN|CALL|COMMENT|COMMIT|CONNECT|CREATE|DELETE|DROP|END|EXPLAIN|EXPORT|GRANT|IMPORT|INSERT|LOAD|LOCK|MERGE|REFRESH|RENAME|REPLACE|REVOKE|ROLLBACK|SELECT|SET|TRUNCATE|UNLOAD|UNSET|UPDATE|UPSERT)+ 
    \ end=+;+ 

let b:current_syntax = "pysql" 

, başlar vurgulayarak verilen SQL anahtar kelime birinde ve ilk ;'da durur ve sonraki SQL anahtar sözcüğünde yeniden başlayabilir veya python dizesinin sonunda durur (bkz. keepend).