Vim中的语法折叠可以轻松地为区域创建折叠,可以使用正则表达式定义其开头和结尾:
syn region myRegion start =“#region”end =“#endregion”transparent keepend extend fold
但是,我不知道如何使用语法折叠来定义C ++样式的折叠 - 样式注释,这些注释是以“//”。
开头的行集。答案 0 :(得分:8)
我想我找到了一个解决方案:
:syn匹配评论“\ v(^ \ s * //。* \ n)+”fold
这是一个多行匹配,用于折叠以空格和双斜线开头的连续行。为了简洁,开头的“\ v”标记了“非常神奇”的模式。似乎工作。
答案 1 :(得分:0)
要折叠多行注释块,使用foldmethod = indent,您必须使用expresion并重新编码缩进折叠。在你的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
返回缩进的折叠级别。
另一个:
join( map(synstack(a:lnum, 1), 'synIDattr(v:val, "name")') )
检查该行的第一个字符是否被视为具有语法的注释。所以这是将缩进和语法折叠与表达式(最高级的折叠)合并的好方法。
请注意,您还可以“设置foldtext”,具体取决于您希望结果的样子。