2010-09-15 12 views
9

Tengo documentos Vim que tienen regiones de bloque de código que usan regiones 'sintaxis incluyen' para tener resaltado de sintaxis diferente del documento principal. Por ejemplo, tengo definida una región de sintaxis llamada 'pyregion' que uso cuando ingreso el código de Python. Las áreas pyreion del documento se resaltan usando la configuración en el archivo de sintaxis de Python, mientras que el área fuera de la región usa el archivo de sintaxis del documento principal.Color de fondo completo que resalta el bloque de código en Vim

Quiero que todo el fondo en la región de Python tenga sombreado un color diferente para distinguirlo de las áreas que no son Python del documento. Puedo conseguir parte del camino mediante la introducción de un fondo para toda la región de pitón:

:highlight pyregion guibg=#555555 

Pero el comando anterior cambia el fondo sólo para las áreas que tienen caracteres de texto en ellos, no para toda fondo de la región, que parece gobernada como resto del documento por el color de fondo definido para el grupo 'Normal'. Esto está bien, llama la atención sobre la región, pero tiene una apariencia borrosa porque solo los caracteres del código tienen antecedentes diferentes, no toda la banda de la región en la pantalla.

¿Hay alguna manera de obtener una banda uniforme de un color de fondo diferente en toda la región, no solo una parte de la región donde hay caracteres?

Hay pregunta relacionada y respuesta en la siguiente enlace, pero por lo que yo puedo decir que la respuesta también los cambios de fondo sólo cuando hay texto: Highlight Code Block Backgrounds with Vim

Gracias por cualquier ayuda.

Respuesta

7

No creo que esto sea posible sin una burla ridícula (ver más abajo). Si intenta esto:

:match Error /\%3l/ 

Se destaca lo que Vim considera que es el conjunto de la línea 3. La destacando sólo se extiende hasta el final de los personajes. Esto me hace sospechar que no habrá forma de resaltar personajes inexistentes.


Deje de leer ahora.

Puramente como un ejercicio de lo ridículo, por supuesto podría agregar una gran cantidad de espacios al final de cada línea y luego eliminarlos cuando guarde. Esto sería tonto, pero es lo único que se me ocurre.

" Add spaces to the end of every line (you could also do 
" this selectively for lines that don't already have lots 
" of spaces and you could do it on reading a file or whatever) 
:exe '%s/$/' . repeat(' ', 1000) . '/' 
" Automatically remove spaces at the end of every line when saving 
:autocmd BufWritePre %s/ *$// 
" Make 'A' append at the end of the non-space characters on the line 
:nmap A/*$<CR>i 
" Make '$' go to the end of the non-space characters on the line 
:nmap $ /.\? *$<CR> 

Descargo de responsabilidad: do not do this.

+0

Al - Gracias, estaba averiguando por mí mismo que esto es solo una limitación de Vim que es más inteligente de aceptar que luchar en contra. Obtuve una respuesta similar de la consulta que publiqué en los grupos de usuarios de vim. Es más fácil aceptarlo cuando sé que no hay una manera sensata de obtener exactamente lo que quiero. –

3

Sí, puede hacerlo utilizando el comando de firmar.

http://vimdoc.sourceforge.net/htmldoc/sign.html

sign define 1 linehl=Error 
sign place 1 name=er1 line=1 file=file.txt 

resaltará la primera línea de archivo.txt todo el camino hasta el borde de la terminal.

Cuestiones relacionadas