2010-03-17 6 views
6

he definido un tipo de archivo personalizado con estas líneas:Vim resaltado de sintaxis: hacer que la región sólo se han encontrado en una línea

syn region SubSubtitle start=+=+ end=+=+ 
highlight SubSubtitle ctermbg=black ctermfg=DarkGrey 

syn region Subtitle start=+==+ end=+==+ 
highlight Subtitle ctermbg=black ctermfg=DarkMagenta 

syn region Title start=+===+ end=+===+ 
highlight Title ctermbg=black ctermfg=yellow 

syn region MasterTitle start=+====+ end=+====+ 
highlight MasterTitle cterm=bold term=bold ctermbg=black ctermfg=LightBlue 

incluyo todos mis partidas en este tipo de documento como este:

==== Biggest Heading ==== // this will be bold and light blue 

    ===Sub heading === // this will be yellow 

    bla bla bla // this will be normally formatted 

Sin embargo, ahora mismo cada vez que uso un signo igual en mi código, piensa que es un título. ¿Hay alguna forma de que pueda forzar un partido para que sea solo en una línea?

Respuesta

6

ACTUALIZACIÓN: Mi respuesta anterior es incorrecta, puede hacer esto con una región, acaba de hacer

syn region SubSubtitle start=+=+ end=+=+ oneline 

Ver :help syn-oneline y :help syn-arguments. Supongo que muestra que no puedo ejecutar vim en este momento, ¿verdad?


respuesta anterior

Según mi lectura de la :help syntax, no hay manera de hacer esto con una región. Sin embargo, se puede hacer esto con un sin-partido:

syn match SubSubtitle /=\@<!=[^=]*==\@!/ 

El /=\@<!/ dice que no hay = inmediatamente antes de su partido, y la /=\@!/ dice que no hay = inmediatamente después, por lo que este coincide exactamente un =, un montón de no-= (sin incluir líneas nuevas - para incluir líneas nuevas debería ser \_[^=]), luego exactamente una =.

El resto son similares

syn match Subtitle /=\@<!=\{2}[^=]*=\{2}=\@!/ 
syn match Title  /=\@<!=\{3}[^=]*=\{3}=\@!/ 
syn match MasterTitle /=\@<!=\{4}[^=]*=\{4}=\@!/ 

Todavía puede hacer partidos dentro de syn-partidos, por lo que si usted tiene cualquiera de anidación en marcha, seguirá siendo el trabajo.

Por ejemplo

syn match Todo /\<TODO\>/ containedin=SubSubtitle,Subtitle,Title,MasterTitle contained 
+1

impresionante! Gracias, sabía que vi eso en línea en algún lado cuando busqué la ayuda de vim, pero nunca puedes encontrar cosas cuando las necesitas. – sixtyfootersdude

Cuestiones relacionadas