Saya suka melipat dengan lekukan tetapi termasuk komentar di flip (maksud saya setiap komentar mendapatkan tingkat lipatan yang sama dengan baris sebelumnya).
Sayangnya, kata kunci foldignore hanya berfungsi untuk satu baris komentar. Jadi saya lipat dengan expr di 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
Blok terakhir:
indent(a:lnum)/&shiftwidth
Mengembalikan basis lipatan pada indent.
Dan yang lainnya:
join( map(synstack(a:lnum, 1), 'synIDattr(v:val, "name")') )
Cek apakah karakter pertama dari baris dianggap sebagai komentar dengan sintaks. Jadi ini adalah cara yang baik untuk menggabungkan lipat indent dan sintaks dengan ekspresi, lipatan paling canggih.
Perhatikan bahwa Anda juga dapat "mengatur teks lipat" tergantung pada bagaimana Anda ingin hasilnya terlihat.