【问题标题】:Collapse/expand parts of .emacs file with org-mode使用 org-mode 折叠/展开 .emacs 文件的部分内容
【发布时间】:2013-02-07 05:04:23
【问题描述】:

我最近学习了 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 完成这样的事情?

谢谢!

【问题讨论】:

    标签: emacs elisp org-mode


    【解决方案1】:

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

    做得很好的是folding-mode。在wiki page 上查看它的信息,但基本上你所做的就是围绕你想要折叠的代码块设置 cmets,如下所示:

    ;;{{{ 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...
    

    【讨论】:

    • 这就像我想要的那样工作。导入部分有点棘手,但我想通了。
    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-12
        • 1970-01-01
        • 1970-01-01
        • 2021-12-01
        • 1970-01-01
        • 2013-03-23
        • 1970-01-01
        • 2023-03-20
        相关资源
        最近更新 更多