2011-06-29 9 views
6

he visto soluciones parciales a través de Internet, pero ninguno que realmente me satisfizo: ¿Qué tengo que poner en mi .vimrc (lo ideal es que no quiero a ninguna oportunidad sintaxis/*. vim) de manera que en todos los archivos .c/cpp/h que abro, obtengo el plegado automático de las secciones #ifdef ... #endif?autoplegado #ifdef .. # endif en vim través .vimrc

+0

Lo foldmethod está usando? Sintaxis plegable? –

+0

Sí, la sintaxis de plegado (pero supongo que pude, que si esto facilita el plegado automático) – dcn

Respuesta

6

Si el único tipo de plegado que se desea es #ifdef las secciones, la forma más fácil es crear un archivo ~/.vim/after/ftplugin/c.vim (es posible que tenga que hacer esto en cpp.vim, no estoy seguro) con el siguiente contenido:

set foldmarker=#ifdef,#endif 
set foldmethod=marker 

Si realmente quiere poner en .vimrc en lugar de utilizar la estructura ~/.vim/after/, se puede hacer algo como esto:

autocmd FileType *.[ch]{,pp} call FoldPreprocessor() 
function! FoldPreprocessor() 
    set foldmarker=#ifdef,#endif 
    set foldmethod=marker 
endfunction 

es posible que también desee considerar la U cantar:

set foldmarker=#if,#endif 

Como que captura #if defined(...), #ifdef, #ifndef, #if 0 etc, así como #ifdef.

Hacer esto con el plegado de sintaxis es más difícil, ya que tendrá que cambiar la especificación de sintaxis, ya que no es compatible con este estándar.

+2

vim ya tiene un plegamiento sintaxis de C, pero no doble la #x. ¿Cómo agregar esto al plegado automático de la sintaxis C? – orezvani

+0

El patrón '*. [Ch] {, pp}' no funciona para mí en un archivo 'cpp', tampoco lo hace' * .cpp'. Cuando uso simplemente '*' funciona. ¿Alguna idea de cuál es el problema? – oarfish

6

¿Sabe que puede navegar por los bloques condicionales del preprocesador con la clave %?

Además, [# y ] # Desplazarse hacia arriba/abajo.

Por lo que podría ir al inicio de un bloque condicional (tal vez con /^#Introduzca), entonces

zf%    -- fold to next conditional directive 
v2]#zf   -- fold to second next directive (e.g. #else... #endif) 

zd dejar caer el pliegue.

Tal vez se puede idear un pequeño script en torno a este concepto. No estoy muy seguro de si habrá interacción (adversa) con el plegado de la sintaxis regular, ya que no tengo el hábito de usar eso. Usualmente utilizo el doblado de sangrías con manipulación manual de pliegues como esta.

Cuestiones relacionadas