2011-08-11 9 views
8

Quiero personalizar el resaltado de sintaxis en Vim (versión de GUI). Hay un archivo de sintaxis existente para mi idioma. Quiero agregar a esa sintaxis que resalte un color de fondo para cada línea si esa línea comienza con >. Me di cuenta de que, básicamente, lo que puedo lograr esto medianteVim fondo de resaltado de sintaxis personalizada solo

:syntax match Output /^>.*$/ 

y añadiendo

:hi Output guibg=LightBlue 

al esquema de colores. El fondo del texto en estas líneas Output se colorea entonces en azul claro, pero también anula el color de primer plano. Por lo tanto, la mayor parte del resaltado de sintaxis desaparece. ¿Cómo puedo mantener el resaltado de sintaxis en primer plano en estas líneas?

También: ¿Hay alguna manera de extender el resaltado del fondo hasta el final (extremo derecho de la pantalla) de estas líneas?

+1

Esta es una buena pregunta. Me temo que la respuesta es probablemente no para ambos, pero espero que alguien me demuestre que estoy equivocado. – Owen

Respuesta

0

Prueba esto:

:hi Output guibg=LightBlue guifg=NONE 
+0

Me sale en vim.gtk -g: "E254: Kann muere Farbe None nicht zuweisen". Traduciendo al inglés: No se puede asignar color Ninguno. – rembremading

+0

Necesario para estar en mayúsculas. Corregido – bhinesley

+0

Gracias, acabo de descubrir que el comando no se queja con NINGUNO, pero sigo teniendo el resultado descrito anteriormente. Tenga en cuenta que pongo el comando de resaltado al comienzo del archivo de esquema de colores e ingreso el comando de sintaxis en el editor. ¿Puede depender de la orden? – rembremading

3

Aquí es cómo preservar la sintaxis, estoy a juego líneas que comienzan con {

:hi Output guibg=LightBlue 
:match Output '\%>0v{.*' 

enter image description here

Editar: ya que desea que el frente a usted necesita

:match Output '^[^<].*$' 

enter image description here

+0

Funciona (en orden inverso). ¿Es la primera línea más que una expresión regular, como la mía? ¿Alguna idea de si resaltar toda la línea podría realizarse con resaltado de sintaxis? – rembremading

+0

Estoy mirando alrededor, pero no puedo encontrar. Con las expresiones regulares hacemos coincidir '^. * $' Así que tiene sentido resaltar hasta que el carácter '\ r' sea, y no hasta el tamaño de la ventana. Tal vez hay algo relacionado con ': set ve = all' pero no estoy seguro. –

+0

la expresión regular que estoy utilizando coincide '\%' todo '>' después de la columna virtual '0v' cero, luego' {.* 'para unir el contenido que comienza con {. –

0

La forma más fácil de lograr lo que estás buscando es con el comando :match como Eric Fortis ha señalado.

La única forma que conozco de lograr esto con el resaltado de sintaxis requerirá que haga coincidir toda la línea como lo hace actualmente. Luego deberá especificar, utilizando el modificador contains=..., qué elementos de sintaxis pueden estar en su línea. También estoy bastante seguro de que estos elementos necesitarán tener el atributo contained asignado a ellos. De esta forma, cualquier elemento que se encuentre en su línea, es decir, que coincida con el .*, lo conservará resaltado.

Ver :help :syn-contains para más.

Cuestiones relacionadas