Мне нравится сворачивание с отступом, но включая комментарии в сгибе (я имею в виду, что каждый комментарий получает тот же уровень сгиба, что и предыдущая строка).
К сожалению, ключевое слово foldignore работает только для однострочных комментариев. Поэтому я сворачиваю с expr в vimrc:
set foldmethod=expr
set foldexpr=FoldMethod(v:lnum)
function! FoldMethod(lnum)
"get string of current line
let crLine=getline(a:lnum)
" check if empty line
if empty(crLine) "Empty line or end comment
return -1 " so same indent level as line before
endif
" check if comment
let a:data=join( map(synstack(a:lnum, 1), 'synIDattr(v:val, "name")') )
if a:data =~ ".*omment.*"
return '='
endif
"Otherwise return foldlevel equal to indent /shiftwidth (like if
"foldmethod=indent)
else "return indent base fold
return indent(a:lnum)/&shiftwidth
endfunction
Последний блок:
indent(a:lnum)/&shiftwidth
Возвращает базовый уровень в отступе.
И другой:
join( map(synstack(a:lnum, 1), 'synIDattr(v:val, "name")') )
Проверяет, является ли первый символ строки комментарием с синтаксисом. Так что это хороший способ объединить отступы и свертывание синтаксиса с выражением, самым продвинутым свертыванием.
Обратите внимание, что вы также можете «установить foldtext» в зависимости от того, как вы хотите, чтобы результат выглядел.