如何在Vim中折叠C风格的多行注释/*...*/?
Vim 仅折叠 C/C++ 多行 C 风格注释配置方案
之前的配置无法生效是因为foldexpr需要返回明确的折叠层级规则,而非单纯的布尔匹配结果,同时单行正则无法跨行识别多行注释范围,正确配置如下:
将以下代码添加到你的 .vimrc 配置文件中即可生效:
" 仅针对C/CPP文件启用自定义注释折叠规则 autocmd FileType c,cpp setlocal foldmethod=expr foldexpr=CCommentFold() function! CCommentFold() let current_line = getline(v:lnum) " 单行 /* */ 注释默认不折叠,如需折叠可将返回值改为1 if current_line =~ '^\s*/\*.*\*/\s*$' return 0 " 多行注释起始行,标记为折叠起始 elseif current_line =~ '^\s*/\*' return 1 " 多行注释结束行,标记为折叠结束 elseif current_line =~ '\*/\s*$' return '<1' " 多行注释中间行,归属到当前折叠块 elseif synIDattr(synID(v:lnum, 1, 0), "name") =~? 'comment' return 1 " 非注释行不折叠 else return 0 endif endfunction
该配置的特性:
- 仅折叠
/* */格式的多行C风格注释,不会折叠函数、括号、单行//注释等其他内容 - 依赖Vim内置的语法识别能力判断注释范围,不会出现误折叠代码的问题
- 可自行调整单行块注释的折叠行为,只需修改对应位置的返回值即可
内容的提问来源于stack exchange,提问作者neolith
相关产品推荐
相关产品推荐

