根据这些帖子:
可以通过某种方式替换文件中的require
和load
语句.emacs
来加快 emacs 的启动速度。但是我不知道如何详细执行此操作。
例如,我的 .emacs 文件中有以下内容(除其他外require
)load
:
(load "auctex.el" nil t t)
(require 'alarm)
(require 'linked)
(load "nxhtml/autostart.el")
(require 'autoinsert)
(require 'recentf)
(require 'color-theme)
(load "~/.emacsaddons/emacs-color-theme-solarized/color-theme-solarized")
...
对于alarm
和 ,linked
在名为 的目录中有对应的文件.emacsaddons
, fornxhtml
有目录,对于其他目录,在 中没有对应的文件.emacsaddons
。在上面的示例中,我没有包含文件中的所有require
或load
语句.emacs
,仅包含一些我认为替换它们的步骤autoload
在它们之间有所不同的地方(例如,因为有些有el
文件.emacsaddons
,有些没有,或者因为nxhtml
是...的子目录.emacsaddons
)。
通过功能替换所有内容autoload
以提高性能的详细步骤是怎样的?
答案1
作为自动加载的第一步,我建议您将显式load
命令转换为附加到 emacs 应加载的内容列表中的路径,如下所示:
(add-to-list 'load-path (expand-file-name "~/.emacs.d/"))
在 的顶部.emacs
,您可以调用其他依赖于加载其他文件的东西,以便找到它们。
特别是为了推迟加载文件,对于(require 'foo)
中的每个文件.emacs
,您应该将其替换为类似以下内容的内容:
(autoload 'name-of-foo-mode "code-for-foo.el" "Minor/Major mode for foo" t)
您可能必须试验(也许阅读)相应文件的代码,.el
看看需要用什么名称来代替
'name-of-foo-mode
.最常见的是'foo
或'foo-mode
,但存在不一致的情况。
就我而言,这些声明靠近我的底部.emacs
:
(autoload 'textmate-mode "textmate" "Minor mode for automatic bracket pairs" t)
(autoload 'post-mode "post" "Mode for editing e-mails" t)
(autoload 'turn-on-reftex "reftex" "Minor mode for references in TeX files" t)
(autoload 'mode-compile "mode-compile" "Compile current buffer" t)
(autoload 'markdown-mode "markdown-mode" "Major mode for Markdown files" t)
require
但在转向自动加载之前我必须声明的一些声明是:
(require 'reftex)
(require 'post)
(require 'compile)
(require 'textmate)
因此,正如我所说,您可能需要进行一些实验或阅读代码,但最终这是值得的,因为如果您经常调用 emacs,它会为您节省一些时间。
答案2
我发现快速启动 emacs 的最佳方法是守护进程。这些说明适用于 emacs23。以前的版本具有服务器/客户端功能,但配置可能更困难。当我第一次登录桌面时,我执行emacs --daemon
.此后,每次我需要 emacs 时,我都会执行它emacsclient -c filename
,它会立即弹出。在服务器/客户端模式下使用 emacs 时,需要改掉使用C-x C-c
退出 的习惯,而改为键入C-x #
。 FWIW,这似乎是 emacs23 解决的问题,因为我有时会发现自己在C-x C-c
没有杀死服务器进程的情况下打字,但我仍然坚持我的旧习惯。
根据您的要求,这可能比操纵您的配置以获得很少的收益更好。