关于如何在emacs中获取代码折叠有几个问题,而不必在评论中添加任何特殊字符,如"标记".有人说"没有完美的解决方案".
似乎可以通过解析正在编写的程序的源来查找匹配的括号或括号,或者基于缩进来完成它.您还可以使用使用不同方法的脚本组合.
那么为什么人们普遍认为没有"完美"和直接的方式在emac中获得代码折叠?emacs或其体系结构中是否存在某些难以编程的内容?如果这很容易,经过这么多年聪明的人使用emacs你会认为有人会写它.
Leo*_*yev 24
你应该使用Hideshow(hs-minor-mode)和fold-dwim.el.它完全按照你的建议 - 寻找匹配的大括号/ parens,并且可以设置为缩减缩进.
对于大多数常见语言,有一个强大的折叠解决方案,如果没有,所有折叠包都是高度可定制的.事实上,唯一的缺点是折叠方法的扩散(对此有fold-dwim很大帮助); 我曾经认为,因为没有人能指出我一个明确的解决方案,折叠是艰难的或不可能的 - 实际上,事实恰恰相反.你只需要做一点实验,看看什么最适合你.
我曾经使用过folding.el(比如把我的东西分组.emacs),outline-minor-mode现在就是Hideshow.有一些机会,它们都不会完全按照您想要的方式工作(例如,您可能需要设置轮廓正则表达式,或定义折叠标记folding.el),但结果很简单.默认的键绑定可能有点巴洛克式,但这可以通过fold-dwim和/或hideshow-org(强烈推荐用于Hideshow,参见Emacswiki隐藏页面;你也可以hideshow-org使用一些快速和脏的elisp 来模仿其他折叠模式的行为fold-dwim)来解决.一旦你弄清楚你喜欢的设置,只需通过钩子或缓冲区局部变量自动打开它,并观察你的代码折叠:)(见下文,注意+边缘的可点击的).
alt text http://img198.imageshack.us/img198/4029/screenshot1oc.png
rry*_*yan 11
你应该看看CEDET.它可以很好地进行代码折叠,以及许多其他花哨的功能,如果你从IDE切换到Emacs,你可能正在寻找它.
具体来说,寻找`global-semantic-tag-folding-mode'
您不需要任何额外的东西,只需为要折叠的文件类型启用outline-minor-mode.
但事实上,Emacs 有多种解决方案;我在http://en.wikipedia.org/w/index.php?title=Code_folding&oldid=375300945#cite_note-2列出了其中一些(我碰巧遇到的)。
不过,我遗漏了一些东西:在某些情况下,我想结合几种机制:例如,对于降价,我想使用基于轮廓的折叠(对于部分)和基于缩进的折叠(对于引用、代码块等)——这样就不用为 Markdown 实现完整的解析器了。
他们来了:
Emacs 中基于标记的折叠是通过折叠次要模式实现的。
人们可以使用set-selective-displayEmacs 中的函数根据缩进级别隐藏行,如通用代码折叠注释中所建议的那样。
Emacs 中依赖于语法的折叠由以下各项支持:
通过某些编程语言的hideshow小模式;
还,
senator-fold-tag命令
,sgml-fold-element命令,Fold-dwim接口统一了多种折叠机制 。
另请参阅http://www.emacswiki.org/emacs/CategoryHideStuff。
Emacs 中用户选择区域的折叠是通过hide-region-hide命令实现的。