сделать Vim Fold также скрыть новую строку после функции

8

Как можно сделать функцию сворачивания vim - при использовании foldmethod = синтаксис - также скрыть по одной новой строке после каждой функции, if-else и struct (используя Go).

Лукаш Грюнер
источник

Ответы:

4

Вот как это сделать для C:

  • Возьмите исходный файл синтаксиса (под Unix, обычно находится в /usr/share/vim) и скопируйте его (снова, под Unix) ~/.vim/syntax.
  • Измените шаблон «end» в определении региона cBlock:
syntax region cBlock    start="{" end="}" transparent fold

становится

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

Здесь первый \nсоответствует символу новой строки сразу после закрывающей скобки, второй - пустой строке. Это не будет работать, если }сопровождается, например, комментарием: блок все равно будет свернут, но следующий перевод строки не будет.

У меня нет файла синтаксиса для Go здесь (насколько я могу судить), но он должен работать аналогичным образом.

Примечание: более гибкий способ - создать новый файл ~/.vim/after/syntaxи просто изменить определение региона, но здесь я потерпел неудачу. Простое копирование определения региона не работает.

Ансгар Эстерманн
источник
0

Я знаю, что он старый, но в дополнение к решению @ 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

в ~/.vim/syntax/c.vimсгибе новая строка (для structs тоже)

Jorengarenar
источник