2011-03-10 25 views
7

Tengo un script que lee un archivo HTML y reemplaza las ocurrencias de ~%foo%~ con un valor establecido por Perl. Algo como esto:Sintaxis HTML personalizada de Vim

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

produciría algo así en el navegador:

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

derecho por lo que quiero usar la sintaxis de Vim destacando distinguir las ocurrencias ~%foo%~ en el código HTML. De forma predeterminada, el resaltado de sintaxis HTML creará los valores de atributo de un elemento HTML Magenta y quiero que la parte ~%foo%~ sea DarkMagenta. Estoy en el camino correcto porque si hago un comentario de las líneas tokenQuoted (o líneas de tokens) obtengo los resultados deseados, pero con ambas coincidencias y aspectos destacados, el resaltado de token sobrescribe el resaltado tokenQuoted.

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 

El archivo que estoy trabajando en el mismo se solicita después del default html.vim se obtiene a través de autocmd *.html ~/.vim/syntax/html.vim en .vimrc.

+1

+1 por usar vim – ejohansson

+0

Creo que se olvidó de hacer una pregunta. ¿Cuál es el problema? ¿Qué estas viendo? ¿Qué te gustaría ver en su lugar? –

Respuesta

2

El problema es que la coincidencia token no se excluye de estar contenida en la coincidencia tokenQuoted. Para obtener los resultados deseados, es decir, resaltar los tokens cotizados diferentes de los tokens no citados, use lo siguiente en su archivo de sintaxis.

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 

O si tiene sentido utilizar una región de sintaxis en lugar de un partido, reemplace las líneas de solape sintaxis anterior con lo siguiente.

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

supongo que también debería mencionar que cuando me estaba poniendo a prueba esta que acabo de crear el archivo ~/.vim/syntax/html.vim y añadió al contenido de arriba. No hubo necesidad de agregar nada a mi archivo .vimrc.

Cuestiones relacionadas