SO上有几个关于如何在emacs中折叠代码的问题,而不必在评论中添加任何特殊字符,例如“标记”。有人说,“没有完美的解决方案”。
似乎可以通过解析正在编写的程序的源代码并查找匹配的括号或括号来完成,或者基于缩进来完成。您还可以使用使用不同方法的脚本组合。
那么为什么人们普遍认为在 emac 中没有“完美”且直接的方法来获得代码折叠呢?emacs 或其架构中是否有某些东西使其难以编程?如果这很容易,那么在聪明人使用 emacs 这么多年之后,您会认为有人会编写它。
7 回答
您应该将 Hideshow( hs-minor-mode
) 与fold-dwim.el
. 它完全按照您的建议进行 - 查找匹配的大括号/括号,并且可以设置为退回到缩进。
对于大多数常用语言,有一个强大的折叠解决方案,如果没有,所有的折叠包都是高度可定制的。事实上,唯一的缺点是折叠方法的激增(对此有fold-dwim
很大帮助);我曾经认为,因为没有人能指出一个明确的解决方案,折叠是困难的或不可能的——事实上,恰恰相反。您只需要进行一些试验,看看哪种方法最适合您。
我曾经使用过folding.el
(例如在我的 中对东西进行分组.emacs
),outline-minor-mode
现在是 Hideshow。有可能它们都不能完全按照您想要的方式开箱即用(例如,您可能需要设置大纲正则表达式,或为 定义折叠标记folding.el
),但事实证明这很容易。默认的键绑定可能有点巴洛克风格,但这可以通过fold-dwim
and/or进行补救hideshow-org
(强烈推荐用于 Hideshow,参见 Emacswiki hideshow 页面;您还可以hideshow-org
使用一些快速而简单的 elisp 和 来模仿其他折叠模式的行为fold-dwim
)。一旦你确定了你喜欢的设置,只需通过钩子或缓冲区局部变量自动打开它,然后观察你的代码折叠:)(见下文,注意页+
边空白处的可点击)。
替代文字 http://img198.imageshack.us/img198/4029/screenshot1oc.png
你应该看看 CEDET。如果您从 IDE 切换到 Emacs,它可以很好地进行代码折叠,以及您可能正在寻找的许多其他花哨的功能。
具体来说,查找“global-semantic-tag-folding-mode”
您不需要任何额外的东西,只需为要折叠的文件类型启用大纲-次要模式。
但事实上,Emacs 有多种解决方案;我在http://en.wikipedia.org/w/index.php?title=Code_folding&oldid=375300945#cite_note-2列出了其中一些(我碰巧遇到的)。
虽然,我缺少一些东西:在某些情况下,我想结合几种机制:例如,对于降价,我想使用基于轮廓的折叠(对于部分)和基于缩进的折叠(对于引用,代码块等)——为了不用为 Markdown 实现一个完整的解析器而烦恼。
他们来了:
Emacs 中基于令牌的折叠
Emacs 中基于令牌的折叠由折叠次要模式实现。
Emacs 中基于缩进的折叠
可以使用set-selective-display
Emacs 中的函数根据缩进级别隐藏行,正如通用代码折叠说明中所建议的那样。
Emacs 中依赖于语法的折叠
Emacs 中依赖于语法的折叠受以下各项支持:
通过某些编程语言的hideshow次要模式;
还,
- 通过语义标签折叠次要模式和
语义支持的语法
senator-fold-tag
命令 , - 以及通过doc-mode获取 JavaDoc 或 Doxygen 注释,
- 通过 TeX 折叠模式
sgml-fold-element
命令,- nxml-outln库在相应的语言特定模式下,并且可能在特定语法的其他模式下。
- 通过语义标签折叠次要模式和
语义支持的语法
fold-dwim接口统一了几种折叠机制 。
另请参阅http://www.emacswiki.org/emacs/CategoryHideStuff。
在 Emacs 中折叠用户选择的区域
Emacs 中用户选择区域的折叠是通过hide-region-hide命令实现的。
我使用折叠模式已经有一段时间了。使用自动插入模板和缩写,它对我来说非常适合一些漂亮的代码块。
能够生产折叠的缓冲区(用于打印/发送电子邮件)一直是我的愿望。我的一些折叠标签用于安全/密码隐藏。
是的,最后代码折叠出现在 emacs 中。在 melpa.org 包库中尝试 yafolding。
我知道这有点旧,但对我来说origami.el 开箱即用效果很好。