使用org-mode折叠/展开.emacs文件的各个部分

时间:2013-02-07 05:04:23

标签: emacs elisp org-mode

我最近学习了emacs'org模式的基础知识,并且无法想象将崩溃/扩展概念应用于源文件的某些部分。我希望能够在子部分中划分我的.emacs文件,并且只在加载时显示标题,如下所示:

; ERC config...

; DIRED config...

; MISC config...

这些中的每一个当然都是扩展后的多行代码的标题,如下所示:

; ERC config
(defun start-irc ()
  (interactive)
  (erc-tls :server "irc.freenode.net" :port 6697 :nick "foo"))

; DIRED config...

; MISC config...

这可能吗?我怎么能用emacs 24.2完成这样的事情?

谢谢!

3 个答案:

答案 0 :(得分:8)

org-mode一样好,它确实需要一些结构,我认为不能在你的.emacs文件中按照你想要的方式进行维护。

的效果是folding-mode。在wiki page上查看有关它的信息,但基本上你要做的是围绕你要放在折叠中的代码块设置注释,如下所示:

;;{{{ some folder of some kind

(a few lines)
(of lisp)
(this "code" is just filler)

;;}}}


;;{{{ a different folder

(some more elisp code)

;;}}}

当折叠时,它看起来像:

;;{{{ some folder of some kind...

;;{{{ a different folder...

答案 1 :(得分:7)

Babel使您能够实现这一目标(即以org-mode管理您的init文件)。具体来说,请参阅:http://orgmode.org/worg/org-contrib/babel/intro.html#emacs-initialization

我自己,我在我的init文件中使用outline-minor-mode用于模糊的目的。各种事物被视为大纲标题,但您可以将outline-regexp设置为文件局部变量以限制该行为,然后使用outline-toggle-children切换打开和关闭的东西(您将绑定到某个方便的键)。 toggle命令适用于该部分的任何位置,而不仅仅是标题。

我开始标题我希望默认情况下使用;;;; *折叠并使用以下内容结束我的初始文件:

;;; Local Variables:
;;; outline-regexp: ";;;; "
;;; eval:(progn (outline-minor-mode 1) (while (re-search-forward "^;;;; \\* " nil t) (outline-toggle-children)))
;;; End:

在您的实例中,您可以使用:

;;; Local Variables:
;;; outline-regexp: "; "
;;; eval:(progn (outline-minor-mode 1) (hide-body))
;;; End:

与Trey的建议非常类似,虽然我希望通过折叠你可以轻松地嵌套我不考虑的部分(没有必要这样做)。我觉得大纲方法让文件看起来更清晰,如果这对你很重要。

答案 2 :(得分:4)

您还可以查看与outline-minor-mode一起使用的新Outshine包,使其更像org-mode。在(e)中,lisp文件outshine将分号序列解释为标题,因此遵循标准的注释约定的所有现有代码都可以折叠而无需任何更改。许多类似org-mode的键绑定(如TAB折叠/展开标题等)也可以工作。