将 .emacs 文件中的 require 语句替换为 autoload 以提高性能

将 .emacs 文件中的 require 语句替换为 autoload 以提高性能

根据这些帖子:

可以通过某种方式替换文件中的requireload语句.emacs来加快 emacs 的启动速度。但是我不知道如何详细执行此操作。

例如,我的 .emacs 文件中有以下内容(除其他外requireload

(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。在上面的示例中,我没有包含文件中的所有requireload语句.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没有杀死服务器进程的情况下打字,但我仍然坚持我的旧习惯。

根据您的要求,这可能比操纵您的配置以获得很少的收益更好。

相关内容