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

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中实现这样的功能?
谢谢!
3个回答

8
虽然org-mode很好用,但它需要一些结构,我认为这种结构在.emacs文件中无法维护。而folding-mode效果很好。请查看维基页面上的信息,基本上你需要在要折叠的代码块周围设置注释,例如:
;;{{{ 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...

那个正如我所想的一样成功了。导入部分有点棘手,但我解决了。 - ldionmarcil

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切换打开和关闭(你可以将其绑定到某个方便的键上)。切换命令可以从任何部分运行,而不仅仅是在标题上。

我通过;;;; *开始要默认折叠的标题,然后以此结尾我的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的建议非常相似,不过我认为使用折叠可以轻松地嵌套部分,而我没有考虑这一点(因为没有必要)。如果您觉得大纲方法使文件看起来更加清洁,则可以采用这种方法。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接