Wie kann man die Fold-Funktion von vim - bei Verwendung von foldmethod = syntax - auch eine neue Zeile nach jeder Funktion ausblenden lassen, if-else und struct (mit Go)?
So geht's für C:
/usr/share/vim
) und kopieren Sie sie nach (erneut unter Unix) ~/.vim/syntax
.syntax region cBlock start="{" end="}" transparent fold
wird
syntax region cBlock start="{" end="}\(\n\n\)\?" transparent fold
Hier entspricht das erste \n
dem Zeilenumbruchzeichen unmittelbar nach der schließenden Klammer, das zweite der Leerzeile. Dies funktioniert nicht, wenn }
z. B. ein Kommentar folgt: Der Block wird immer noch gefaltet, die folgende neue Zeile jedoch nicht.
Ich habe hier keine Syntaxdatei für Go (soweit ich das beurteilen kann), aber es sollte auf ähnliche Weise funktionieren.
Hinweis: Der flexiblere Weg wäre, eine neue Datei unter zu erstellen ~/.vim/after/syntax
und nur die Regionsdefinition zu ändern, aber ich war hier nicht erfolgreich. Das bloße Kopieren der Regionsdefinition funktioniert nicht.
Ich weiß, dass es alt ist, aber zusätzlich zur @ ansgar-esztermann-Lösung:
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
in ~/.vim/syntax/c.vim
Falten neue Linie (auch für struct
s)