8

我最近学习了 emacs 的 org-mode 的基础知识,不禁想象将折叠/展开概念应用于源文件的某些部分。我希望能够将我的 .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 完成这样的事情?

谢谢!

4

3 回答 3

8

尽管它很好org-mode,但它确实需要一些结构,我不相信它可以按照您在.emacs文件中想要的方式进行维护。

行之有效folding-mode. 在wiki 页面上查看它的信息,但基本上你所做的是围绕你想要折叠的代码块设置注释,如下所示:

;;{{{ 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...
于 2013-02-07T05:11:29.330 回答
7

Babel使您能够准确地实现这一点(即在 org 模式下管理您的 init 文件)。具体见: http: //orgmode.org/worg/org-contrib/babel/intro.html#emacs-initialization

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

我以默认情况下要折叠的标题开始,;;;; *并以以下方式结束我的 init 文件:

;;; 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 的建议非常相似,尽管我希望通过折叠你可以轻松地嵌套我没有考虑的部分(没有必要这样做)。我觉得大纲方法使文件看起来稍微干净一些,如果这对你很重要的话。

于 2013-02-07T06:23:47.343 回答
4

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

于 2013-05-05T04:15:18.850 回答