Answers:
是的,您当然可以,您可以使用它org-babel-load-file
来执行此操作。
在您的中init.el
,输入以下内容:
(require 'org)
(org-babel-load-file
(expand-file-name "settings.org"
user-emacs-directory))
(我正在使用〜/ .emacs.d / settings.org,但这是个人喜好)。在settings.org
文件中,您可以根据需要进行排列,将elisp包装在:
* Turn off menu bar
#+BEGIN_SRC emacs-lisp
(menu-bar-mode -1)
#+END_SRC
启动Emacs时,它将自动确定settings.org文件是否已更改,如果需要,可以纠缠它以生成settings.el
将被加载的文件。
init.el
: (require 'package) (package-initialize) (setq custom-file "~/.emacs.d/custom.el") (when (file-exists-p custom-file) (load custom-file)) (require 'org) (org-babel-load-file (expand-file-name "settings.org" user-emacs-directory))
如果只需要选择性地显示部分和标题之间的导航,则不需要组织模式。您只需要大纲模式。大纲模式基本上是组织模式的标题级别和部分可见性管理。实际上,组织模式最初是作者对“大纲”模式的扩展,并且成长,成长,成长……即使到今天,它org-mode
也源自outline-mode
。
大纲模式既作为主要模式又作为次要模式存在。次要模式可以在任何主要模式下使用。您可以将其配置为使用与程序语法兼容的标头格式,许多主要模式都可以通过将outline-regexp
变量设置为与标头的开头相匹配的regexp来实现。例如,这是Emacs Lisp模式下的默认值:
";;;\\(;* [^ \t\n]\\|###autoload\\)\\|("
即,节标题以三个或更多分号和一个空格开头,或者在左页边空白处加一个括号。变量outline-level
包含确定标题深度的函数名称;默认值是匹配的字符串的长度outline-regexp
,Emacs Lisp模式会覆盖它以给(
和分配更大的深度;;;###autoload
。
如果您不喜欢默认的标头格式,请outline-regexp
在文件局部变量声明中设置变量。这就是我使用的—我的节头全部由;;;
星号组成,后面是经典的星号序列:
;;; Local Variables:
;;; outline-regexp: ";;;\\*+\\|\\`"
;;; End:
如果要在加载文件时自动打开“大纲”次要模式,请在“本地变量”部分添加以下行—请注意,这将警告您有关Emacs≤23.x中不安全代码的警告。
;;; eval: (outline-minor-mode 1)
大纲次要模式的命令C-c @
默认情况下使用相当不方便的前缀。我将其移至M-o
(我从不使用facemenu绑定),您可能更喜欢另一个键,或者复制Org模式的绑定(与Outline模式有很大的出入)。
精巧的编程使您获得最大的收益,org-mode通过org-babel支持它。@malabarba的博客中解释了两种可能的解决方案:
最简单的方法是加载组织模式,然后使用其解缠功能加载有文化的Emacs配置:
(require 'org)
(org-babel-load-file
(expand-file-name "emacs-init.org"
user-emacs-directory))
另外(为了避免完全加载组织),可以使用Emacs Lisp原语进行解缠:
(defvar endless/init.org-message-depth 3
"What depth of init.org headers to message at startup.")
(with-temp-buffer
(insert-file "~/.emacs.d/init.org")
(goto-char (point-min))
(search-forward "\n* init.el")
(while (not (eobp))
(forward-line 1)
(cond
;; Report Headers
((looking-at
(format "\\*\\{2,%s\\} +.*$"
endless/init.org-message-depth))
(message "%s" (match-string 0)))
;; Evaluate Code Blocks
((looking-at "^#\\+BEGIN_SRC +emacs-lisp.*$")
(let ((l (match-end 0)))
(search-forward "\n#+END_SRC")
(eval-region l (match-beginning 0))))
;; Finish on the next level-1 header
((looking-at "^\\* ")
(goto-char (point-max))))))
再次对大纲模式进行投票。例如,对于组织,.emacs
我使用以下语法:
;;; HEADING:
重要的部分是;;;
和:\n
(add-hook 'emacs-lisp-mode-hook
(lambda ()
(make-local-variable 'outline-regexp)
(setq outline-regexp "^;;; ")
(make-local-variable 'outline-heading-end-regexp)
(setq outline-heading-end-regexp ":\n")
(outline-minor-mode 1)
))
这是一个示例.emacs
:
;;; preliminaries:
;; load-path:
;; This little monster adds all non-dot dirs to Your load path recursively
(let* ((my-lisp-dir "~/.emacs.d/site-lisp/")
(default-directory my-lisp-dir)
(orig-load-path load-path))
(setq load-path (cons my-lisp-dir nil))
(normal-top-level-add-subdirs-to-load-path)
(nconc load-path orig-load-path))
;; ...
;;; modes:
;; python-mode:
(setq py-install-directory "~/.emacs.d/site-lisp/python-mode")
(add-to-list 'load-path py-install-directory)
(require 'python-mode)
;; ...
;;; customizations:
(custom-set-variables
'(blink-cursor-mode nil)
)
;; ...
一个应该启用outline-minor-mode
,然后两个必需的按键是:
C-c @ C-t —显示顶层结构
以上成为
;;; preliminaries:
;;; modes:
;;; customizations:
C-c @ C-a -再显示一次
典型用法是显示顶层结构,移至感兴趣的标题,然后再次显示所有内容。
#+STARTUP: overview
or show all
或contents
options。
#
中的注释不是注释符号,因此emacs的内置elisp解释器在命中#+STARTUP
或类似内容时会感到困惑。(或者我是否误解了您的评论?)
在以下SO答案中,您将看到如何执行此操作,使用一个或多个组织文件的示例项目,使用Cask和指向文档的链接有什么好处。
几个月前,我将配置转到了组织,但我对此并不完全满意。它需要一些配置和组织手册的阅读才能有一个有用的组织文件,使编辑elisp代码变得容易。一个必须启用src块字体化(默认情况下处于关闭状态->使用每个文件变量),检查其他模式是否与编辑src块不冲突(自动填充模式),等等。一个人不想使用Cc (backtick) (
org-edit-src-block`)来编辑src块。而且它为调试提供了一些便利。
我的建议是:首先将您的init文件分解成小的elisp片段,在那里尝试一些缩小的包,helm-swoop
用于快速导航,然后考虑使用org-mode
。
我最近花了一些时间来做到这一点。我最终得到了一个配置-用org-mode维护-使用'use-package'自动安装丢失的软件包-是那种自动安装的github存储库(无耻的插件:https : //github.com / pascalfleury / emacs-config)
我通过克隆存储库并在〜/ .emacs et voila中添加了一行来“引导”了几台机器(Linux和Mac)。我可以随意设置。
org
从elpa 加载最新版本,而不是从org
干净的emacs中获得最新版本?似乎package
需要将初始化代码取出settings.org
并放入init.el
?