Como alguém pode criar a função fold do vim - ao usar foldmethod = sintaxe - também oculta uma nova linha após cada função, if-else e struct (usando Go).
8
Veja como fazer isso para C:
/usr/share/vim
) e copie-o para (novamente, no Unix) ~/.vim/syntax
.syntax region cBlock start="{" end="}" transparent fold
torna-se
syntax region cBlock start="{" end="}\(\n\n\)\?" transparent fold
Aqui, o primeiro \n
corresponde ao caractere de nova linha imediatamente após a chave de fechamento, o segundo a linha vazia. Isso não funcionará se }
for seguido por, por exemplo, um comentário: o bloco ainda será dobrado, mas a nova linha a seguir não.
Eu não tenho um arquivo de sintaxe para o Go aqui (tanto quanto eu posso dizer), mas deve funcionar de maneira semelhante.
Nota: a maneira mais flexível seria criar um novo arquivo ~/.vim/after/syntax
e apenas alterar a definição da região, mas não obtive êxito aqui. Apenas copiar a definição de região não funciona.
Eu sei que é antigo, mas além da solução @ 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
em ~/.vim/syntax/c.vim
dobras nova linha (para struct
s também)