2011-03-10 26 views
7

Bir HTML dosyası okuyan ve ~%foo%~ oluşumlarının yerine Perl tarafından belirlenen bir değere sahip bir komut dosyası sahibim. Böyle bir şey:Özel Vim HTML sözdizimi

<span class="~%classname%~">~%hi_mom%~</span> 

tarayıcıda böyle bir şey üretmek misiniz:

<span class="classyclass">Hello World</span> 

Sağ yüzden HTML olayları ~%foo%~ ayırt etmek vurgulayarak Vim sözdizimi kullanmak istiyorum. Varsayılan olarak, HTML sözdizimi vurgulaması bir HTML öğesinin Magenta öznitelik değerlerini oluşturacaktır ve ~%foo%~ kısmının DarkMagenta olmasını istiyorum. Doğru yoldayım çünkü tokenQuoted satırlarını (veya simge çizgilerini) açıklarsam, istenen sonuçları alırım ancak her iki eşleşmelerde ve vurgulanmayan işaretler vurgulandığında belirteci vurgulamak için tokenQuoted vurgulamasını geçersiz kılar.

syntax match token  containedin=ALLBUT,htmlString,htmlValue '\~%[^%]\+%\~' 
syntax match tokenQuoted containedin=htmlString,htmlValue  '\~%[^%]\+%\~' 
" tokenQuoted assumes htmlString/htmlValue (:highlight String) is Magenta 
highlight token   term=none ctermfg=White  guifg=White 
highlight tokenQuoted term=none ctermfg=DarkMagenta guifg=DarkMagenta 

Ben varsayılan html.vim sonra kaynaklı çalışıyorum dosya .vimrc yılında autocmd *.html ~/.vim/syntax/html.vim aracılığıyla kaynaklı.

+1

+1 vim kullanmak için – ejohansson

+0

Bir soru sormayı unuttun. Sorun nedir? Ne görüyorsun? Onun yerine ne görmek istersiniz? –

cevap

2

Sorun, tokenQuoted eşleşmesinde yer alan token eşleşmesinin dışlanması değil. İstenen sonuçları almak için, diğer bir deyişle, alıntılanmamış simgeleri farklı alıntılanmış belirteçlerden farklı olarak vurgulamak için, sözdizimi dosyasında aşağıdakileri kullanın.

syntax match token  containedin=ALLBUT,htmlString,htmlValue,tokenQuoted '\~%[^%]\+%\~' 
syntax match tokenQuoted containedin=htmlString,htmlValue  '\~%[^%]\+%\~' 
highlight token   term=none ctermfg=White  guifg=White 
highlight tokenQuoted term=none ctermfg=DarkMagenta guifg=DarkMagenta 

Ya da bir maç yerine bir sözdizimi bölgesini kullanmak mantıklı eğer, aşağıdaki ile yukarıdaki sözdizimi maç satırları değiştirin.

syntax region token  contained start=+\~%+ end=+%\~+ containedin=ALLBUT,htmlString,tokenQuoted 
syntax region tokenQuoted contained start=+\~%+ end=+%\~+ containedin=htmlString 

ben de bunu test edildiğinde sadece dosyayı ~/.vim/syntax/html.vim oluşturulan ve yukarıdaki içeriğe ilave bahsetmeliyiz sanırım. .vimrc dosyasına herhangi bir şey eklememize gerek yoktu.