2009-11-28 17 views
9

¿Hay alguna manera de que VIM continúe aplicando formato a la línea utilizada como encabezado para un pliegue?resaltado de sintaxis en un encabezado de doblez VIM

por ejemplo, tengo el siguiente código:

int foo(int a, int b) { 
    int c; 
.... 
} 

Cuando está plegado, veo:

+-- 4 lines: int foo(int a, int b) {---------------------------- 

Sin embargo, toda la línea se pone de relieve según la clase de "retirada". ¿Hay alguna forma de desactivar esto, así que sigo viendo el resaltado de sintaxis?

[para un ejemplo sencillo que esto no es tan importante, pero también lo uso plegable ampliamente en la visualización de archivos de gran tamaño, y no el formato es mucho más importante para mí]


Respuesta

7

"Sin embargo, toda la línea se resalta según la clase" Plegada ". ¿Hay alguna forma de desactivar esto, así que sigo viendo el resaltado de sintaxis?"

No, el texto del título doblado no es texto que forma parte de un archivo y no se puede editar directamente, solo se calcula y se superpone en la pantalla. El resaltado 'Plegado' se aplica a toda la línea, y todos los pliegues tienen el mismo resalte aplicado.

Para mi uso con vim como estructurador (en el proyecto VimOutliner) Pirateé la fuente vim para permitir diferentes resaltado veces dependiendo del nivel de veces, por lo que hay varios puntos destacados encabezamiento pliegue que se aplican (por ejemplo FoldLevel1, FoldLevel2 , etc.) Supongo que podría ser más pirateado utilizar el resaltado ya existente del texto en la línea de encabezado, pero dado el modo en que funciona el plegado, sospecho que podría ser más difícil de lo que parece.

Lo siento, me sorprendió que la sugerencia de foldmethod de sangrado puede ser exactamente lo que está buscando de todos modos, que preserva la sintaxis en las líneas no perdidas mientras todavía funcionan como un tipo de encabezado para la sección doblada.

5

Creo que lo que' Lo que estamos buscando es cambiar el método de plegado a sangría en lugar de manual, que es el valor predeterminado. Escriba esto en el modo de comando.

:set foldmethod=indent 

Ahora si vas dentro de su función foo y el tipo zm (aumentar el nivel de veces por uno), que se verá así:

int foo(int a, int b) { 
+-- 2 lines: int c;------------------------------------------------------------ 
} 

La línea de foo todavía tendrá resaltado de sintaxis. Para desplegar, por supuesto, escriba zr. Para mayor comodidad pongo las siguientes pocas líneas en mi .vimrc plegar rápidamente o desarrollarse todo:

" Folding and unfolding 
map ,f :set foldmethod=indent<cr>zM<cr> 
map ,F :set foldmethod=manual<cr>zR<cr> 

Hay un también un buen tutorial here, y por supuesto la lectura de la ayuda vim en foldmethod podrían llevarle a otros métodos que te gusta más que la sangría, pero por la forma en que se ve tu código de ejemplo, es probable que desees una sangría.

+0

gracias por la respuesta; quizás no debería haber dado ese ejemplo, sin embargo. Sus comentarios son buenos para el código C, pero también doblo los archivos de texto, utilizando http://www.vim.org/scripts/script.php?script_id=158. Esto no parece prestarse a ninguna solución – Mikeage

+2

No creo que si estuviera doblando archivos de texto sin formato, resaltaría la sintaxis (me gustaría ver un ejemplo), pero si hace lo mismo de la idea se aplica.Si comienza el doblez debajo de la línea que desea que se resalte la sintaxis, aún debería ver la línea que desea resaltar correctamente. – mmrobins

+0

@mmrobins, ¿te importaría mirar [esta pregunta sobre resaltar la sintaxis de Python en una línea de plegado] (http://stackoverflow.com/questions/8655799/syntax-highlight-python-in-a-vim-fold-line) y proporcionando algunos comentarios sobre si es posible y qué podría necesitar cambiar para que esto funcione? –

Cuestiones relacionadas