Wenn Sie vim fold verwenden, wird auch die Zeilenumbruch nach der Funktion ausgeblendet

8

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

Łukasz Gruner
quelle

Antworten:

4

So geht's für C:

  • Nehmen Sie die ursprüngliche Syntaxdatei (unter Unix, normalerweise in /usr/share/vim) und kopieren Sie sie nach (erneut unter Unix) ~/.vim/syntax.
  • Ändern Sie das "End" -Muster in der Definition der cBlock-Region:
syntax region cBlock    start="{" end="}" transparent fold

wird

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

Hier entspricht das erste \ndem 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/syntaxund nur die Regionsdefinition zu ändern, aber ich war hier nicht erfolgreich. Das bloße Kopieren der Regionsdefinition funktioniert nicht.

Ansgar Esztermann
quelle
0

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.vimFalten neue Linie (auch für structs)

Jorengarenar
quelle