Мені подобається складання з відступом, але включаючи коментарі в складці (я маю на увазі кожен коментар отримати той же рівень складки, що і попередній рядок).
На жаль, ключове слово 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")') )
Перевіряє, чи вважається перший символ рядка коментарем із синтаксисом. Тож це хороший спосіб злиття відступів та складання синтаксису з виразом, найдосконалішим складанням.
Зауважте, що ви також можете "встановити складний текст" залежно від того, як ви хочете виглядати результат.