Ich mag es, mit Einzug zu falten, aber die Kommentare in die Falte einzubeziehen (ich meine, jeder Kommentar hat die gleiche Faltebene wie die vorherige Zeile).
Leider funktioniert das Schlüsselwort foldignore nur für einzeilige Kommentare. Also folge ich mit expr in 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
Der letzte Block:
indent(a:lnum)/&shiftwidth
Gibt eine Foldlevel-Basis für den Einzug zurück.
Und die andere :
join( map(synstack(a:lnum, 1), 'synIDattr(v:val, "name")') )
Überprüft, ob das erste Zeichen der Zeile als Kommentar in der Syntax berücksichtigt wird. So ist es eine gute Möglichkeit, Einzugs- und Syntaxfaltung mit Ausdruck zu verbinden, der fortschrittlichsten Faltung.
Beachten Sie, dass Sie auch "Falttext festlegen" können, je nachdem, wie das Ergebnis aussehen soll.