Vim中的语法折叠使创建区域的折叠变得容易,区域的开始和结束可以用正则表达式定义:
系统区域myRegion start="# region“end=#endregion”透明保持延伸折叠“
但是,我不确定如何使用语法折叠来定义C++样式注释的折叠,这些注释是以"//“开头的一组行。
发布于 2009-08-16 15:36:52
我想我找到了解决办法:
:syn匹配注释“v(^s*//.*\n)+”折叠
这是一个多行匹配,可以折叠以空格和双斜杠开头的连续行。开头的"\v“标记模式”非常神奇“以表示简洁。似乎很管用。
发布于 2015-10-23 16:36:39
要折叠多行注释块,使用foldmethod=indent,您必须使用expresion并重新编码缩进折叠。在你的视频里试试这个。
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")') )检查行的第一个字符是否考虑为带有语法的注释。因此,这是一个很好的方法,将缩进和语法折叠与表达式,最先进的折叠。
请注意,您也可以“设置折叠文本”,这取决于您想要的结果的样子。
https://stackoverflow.com/questions/1280514
复制相似问题