foldmethod = indentを使用して複数の行コメントブロックを折り畳むには、expresionとrecode indent foldingを使用する必要があります。あなたの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
最後のブロック:
indent(a:lnum)/&shiftwidth
がインデントに折り畳みレベルベースを返します。
そして、他の1:行の最初の文字は、構文とコメントとして考えるの場合
join(map(synstack(a:lnum, 1), 'synIDattr(v:val, "name")'))
チェックします。したがって、インデントとシンタックスフォールディングを、最も進んだフォールディングである式でマージすると良い方法です。
結果をどのように表示するかによって、「折り畳みを設定する」こともできます。
なぜ「//」で始まるコメントを折り畳む必要がありますか?それらは1行のコメントであり、最小限に抑えて短くして、折り畳む必要はありません。 "/ \ *"で始まり "* /"で終わるコメントブロックのみを折りたたんで実装するのは簡単です。あなたの投稿によると、これは有効でなければなりません:syn region CommentBlock start = "/ *" end = "*/*"透過的なキープエンド延長倍数 – schmrz
多くのコーディング標準では、ブロックコメントに "//"を使用しています。 MSDNはこれらを一貫して使用します。さらに、 "#include"や "using"ステートメントのように、そのパターンを同じパターンに折り畳むことができる他のものがあります。 –