Me gusta doblar con sangría pero incluir los comentarios en el pliegue (quiero decir que cada comentario obtiene el mismo nivel de pliegue que la línea anterior).
Desafortunadamente, la palabra clave foldignore solo funciona para comentarios de una línea. Entonces doblo con expr en 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
El último bloque:
indent(a:lnum)/&shiftwidth
Devuelve una base de doble nivel en la sangría.
Y el otro :
join( map(synstack(a:lnum, 1), 'synIDattr(v:val, "name")') )
Comprueba si el primer carácter de la línea se considera como un comentario con la sintaxis. Por lo tanto, es una buena forma de fusionar sangría y sintaxis con expresión, el plegado más avanzado.
Tenga en cuenta que también puede "establecer foldtext" dependiendo de cómo desee que se vea el resultado.