hacer vim fold también oculta nueva línea después de la función

8

¿Cómo se puede hacer que la función de plegado de vim, cuando se utiliza foldmethod = sintaxis, también se oculte una nueva línea después de cada función, if-else y struct (usando Go).

Łukasz Gruner
fuente

Respuestas:

4

Aquí se explica cómo hacerlo para C:

  • Tome el archivo de sintaxis original (en Unix, que normalmente se encuentra en /usr/share/vim) y cópielo en (nuevamente, en Unix) ~/.vim/syntax.
  • Cambie el patrón de "fin" en la definición de la región cBlock:
syntax region cBlock    start="{" end="}" transparent fold

se convierte

syntax region cBlock    start="{" end="}\(\n\n\)\?" transparent fold

Aquí, el primero \ncoincide con el carácter de nueva línea inmediatamente después de la llave de cierre, el segundo la línea vacía. Esto no funcionará si }es seguido, por ejemplo, por un comentario: el bloque aún se doblará, pero la siguiente nueva línea no lo hará.

No tengo un archivo de sintaxis para Ir aquí (por lo que puedo decir), pero debería funcionar de manera similar.

Nota: la forma más flexible sería crear un nuevo archivo en ~/.vim/after/syntaxy simplemente cambiar la definición de la región, pero aquí no he tenido éxito. Simplemente copiar la definición de región no funciona.

Ansgar Esztermann
fuente
0

Sé que es viejo, pero además de la solución @ ansgar-esztermann:

syntax clear  cBlock
syntax match  cBlock1line /.\s*{.\{-}}/ transparent contains=ALLBUT,cBadBlock,cCurlyError,@cParenGroup,cErrInParen,cErrInBracket,cBlockImp
syntax region cBlockImp  start=/{/  end=/};\?\(\n\n\)\?/ transparent fold contains=ALLBUT,cBadBlock,cCurlyError,@cParenGroup,cErrInParen,cErrInBracket

en ~/.vim/syntax/c.vimpliegues nueva línea (para structs también)

Jorengarenar
fuente