首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Vim中折叠C++风格的注释?

如何在Vim中折叠C++风格的注释?
EN

Stack Overflow用户
提问于 2009-08-14 22:31:34
回答 2查看 3K关注 0票数 4

Vim中的语法折叠使创建区域的折叠变得容易,区域的开始和结束可以用正则表达式定义:

系统区域myRegion start="# region“end=#endregion”透明保持延伸折叠“

但是,我不确定如何使用语法折叠来定义C++样式注释的折叠,这些注释是以"//“开头的一组行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-16 15:36:52

我想我找到了解决办法:

:syn匹配注释“v(^s*//.*\n)+”折叠

这是一个多行匹配,可以折叠以空格和双斜杠开头的连续行。开头的"\v“标记模式”非常神奇“以表示简洁。似乎很管用。

票数 8
EN

Stack Overflow用户

发布于 2015-10-23 16:36:39

要折叠多行注释块,使用foldmethod=indent,您必须使用expresion并重新编码缩进折叠。在你的视频里试试这个。

代码语言:javascript
运行
复制
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

最后一个街区:

代码语言:javascript
运行
复制
indent(a:lnum)/&shiftwidth

返回缩进基础的折叠级别。

另一个是:

代码语言:javascript
运行
复制
join( map(synstack(a:lnum, 1), 'synIDattr(v:val, "name")') )

检查行的第一个字符是否考虑为带有语法的注释。因此,这是一个很好的方法,将缩进和语法折叠与表达式,最先进的折叠。

请注意,您也可以“设置折叠文本”,这取决于您想要的结果的样子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1280514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档