fazer o vim fold também ocultar uma nova linha após a função

8

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).

Łukasz Gruner
fonte

Respostas:

4

Veja como fazer isso para C:

  • Pegue o arquivo de sintaxe original (no Unix, geralmente encontrado em /usr/share/vim) e copie-o para (novamente, no Unix) ~/.vim/syntax.
  • Altere o padrão "end" na definição da região cBlock:
syntax region cBlock    start="{" end="}" transparent fold

torna-se

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

Aqui, o primeiro \ncorresponde 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/syntaxe 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.

Ansgar Esztermann
fonte
0

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.vimdobras nova linha (para structs também)

Jorengarenar
fonte