Tôi thích gấp với thụt lề nhưng bao gồm các bình luận trong nếp gấp (ý tôi là mỗi bình luận có cùng mức độ gấp như dòng trước).
Thật không may, từ khóa Foldignore chỉ hoạt động cho một dòng bình luận. Vì vậy, tôi gấp với expr trong 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
Khối cuối cùng:
indent(a:lnum)/&shiftwidth
Trả về một cơ sở Foldlevel trên thụt lề.
Và một cái khác:
join( map(synstack(a:lnum, 1), 'synIDattr(v:val, "name")') )
Kiểm tra nếu ký tự đầu tiên của dòng được coi là một nhận xét với cú pháp. Vì vậy, đó là một cách tốt để hợp nhất thụt lề và cú pháp gấp với biểu thức, cách gấp tiên tiến nhất.
Lưu ý rằng bạn cũng có thể "đặt Foldtext" tùy thuộc vào cách bạn muốn kết quả trông như thế nào.