Lubię składać z wcięciem, ale włączanie komentarzy w fold (oznacza to, że każdy komentarz ma taki sam poziom foldowania jak poprzednia linia).
Niestety słowo kluczowe foldignore działa tylko w przypadku komentarzy w jednym wierszu. Więc składam z expr w 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
Ostatni blok:
indent(a:lnum)/&shiftwidth
Zwraca składaną podstawę na wcięcie.
I kolejny :
join( map(synstack(a:lnum, 1), 'synIDattr(v:val, "name")') )
Sprawdza, czy pierwszy znak linii jest uważany za komentarz ze składnią. Jest to więc dobry sposób na połączenie wcięcia i składania składni z ekspresją, najbardziej zaawansowanego składania.
Pamiętaj, że możesz także „ustawić tekst rozkładany” w zależności od tego, jak chcesz, aby wyglądał wynik.