【问题标题】:Code folding in Emacs [duplicate]Emacs中的代码折叠[重复]
【发布时间】:2010-11-15 13:39:40
【问题描述】:

可能重复:
How to achieve code folding effects in emacs

Dreamweaver 的一个出色功能是code folding of any lines of text -- 递归!

这太棒了,我可以折叠任何文本或代码,无论语言如何。我使用现有系统;我不会编辑编写良好的代码或用一种语言等编写的代码。主要是 HTML 与上帝知道什么混合在一起。折叠线使理解很多更容易和更快。遗憾的是,这是 Dreamweaver 中我喜欢的唯一功能。

是否有类似目的的 Emacs 代码折叠?

【问题讨论】:

标签: emacs dreamweaver code-folding


【解决方案1】:

有folding mode,一种次要模式。不幸的是,它具有侵入性:您必须使用专门的 cmets 手动注释折叠,当您不使用该模式时(或与不使用该模式的其他人共享代码时),这会使代码混乱。更好的模式不会改变您的代码工作。

让我补充一下:有一个副本值得一看:How to achieve code folding effects in Emacs。

【讨论】:

  • 谢谢,我已经看过那个问题,但它没有回答我的问题,因为我不想编辑我的代码来做这件事。但无论如何我都会接受这个作为答案,即“不”。看来我将不得不自己编写或迁移到 vim。
  • 如果以后有人来搜索这个页面,这个基于标签的折叠库可能会感兴趣:lisperati.com/tagging.html
  • 如果你确实写了它,让我们都知道!很长一段时间以来,我一直想要一个适合 Emacs 的折叠模式。我基本上放弃并开始使用其他编辑器。
【解决方案2】:

hide-show (hs-minor-mode) 是一种次要模式,可以执行类似的操作...

触发折叠的默认键绑定是C-c @ C-c,我觉得这很麻烦。但是我也很少使用它。

【讨论】:

  • 更多详情见:emacswiki.org/emacs/HideShow
  • 我已经看过了。我真的需要一些东西来隐藏给定的区域,而不是像我上面所说的那样试图理解语法。不过还是谢谢。
【解决方案3】:

您可能需要查找函数set-selective-display 和变量selective-display。不完全是您想要的,但它可以让您根据缩进级别隐藏行。

【讨论】:

  • 干杯,我设法使用set-selective-display [cook up something][1] 至少展示了这个折叠想法以供将来讨论。这不是一个解决方案,因为它与代码混淆,但它是一个很好的演示。我将尝试使用 tagging.el 作为示例,从中获得正确实施的想法。 [1]:chrisdone.com/blog/html/2009-08-01-emacs-folding.html#video
  • 指向 emacs 代码折叠视频的 Christopher Done 链接现在是无效链接。
【解决方案4】:

我使用 fold-dwim.el。来自 emacs wiki:

fold-dwim.el 是 Emacs 折叠/大纲模式的统一用户界面。支持folding.el、hideshow.el、outline.el、TeX-fold.el、nxml-outln.el

你可以在这里得到它:

http://www.emacswiki.org/emacs/FoldDwim

我的 .emacs 中有这个:

(require 'fold-dwim)
(global-set-key [(C kp-4)] 'fold-dwim-hide-all)
(global-set-key [(C kp-5)] 'fold-dwim-toggle)
(global-set-key [(C kp-6)] 'fold-dwim-show-all)

请记住,您仍然需要激活 hs-minor-mode、folding-mode 等,但我发现以这种方式使用它们更容易。

【讨论】:

    【解决方案5】:

    您可能会查看的其他内容是 nxhtml-mode;它不会折叠代码,但它会根据其类型以不同的方式突出显示混合代码(即 HTML 和 PHP)。这使您在可理解性方面获得了类似的收益,而没有折叠模式的尴尬。我认为这种方法更适合 Emacs,首先因为代码折叠似乎是一个面向鼠标的想法,不能很好地适应基本上以键盘为中心的 Emacs 界面,其次因为 Emacs 在一定程度上简化了大文件的导航该代码可以保持可见而不会妨碍您。

    【讨论】:

      【解决方案6】:

      如果您确实需要“隐藏给定区域的东西,而不是试图理解语法”(与 hideshow 和其他基于解析的解决方案不同)并且您“不想编辑 [您的] 代码”(不像折叠),那么,我假设你的意思是你不希望这些区域在不同的编辑会话之间保持不变。然后你可以使用http://www.emacswiki.org/emacs/HideRegion 来隐藏用户选择的区域...

      (但这很奇怪。带有持久标记的折叠次要模式似乎是一个更方便的解决方案。)

      【讨论】:

      • HideRegion 太复杂了。我需要一些可以正常工作的东西!
      • @Robin 但是你想让它做什么?我的回答是仅仅隐藏一个任意区域。
      猜你喜欢
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 2012-03-10
      • 1970-01-01
      • 2011-01-24
      • 2019-08-03
      • 2010-11-08
      相关资源
      最近更新 更多