在 .emacs 文件中通过 autoload 替换 require 语句以提高性能

stu*_*ent 8 performance emacs

根据这些帖子:

可以以某种方式替换文件中的requireandload语句.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")
...
Run Code Online (Sandbox Code Playgroud)

对于alarmlinked有一个目录中的相应文件呼吁.emacsaddons,对nxhtml有一个目录,换了别人也有中没有相应的文件.emacsaddons。我没有在上面的例子中包含我的文件中的全部requireload语句.emacs,只有一些我觉得替换它们的步骤在它们autoload之间会有所不同(例如,因为有些有el文件.emacsaddons,有些没有,或者因为nxhtml是...的子目录.emacsaddons)。

autoload功能替换所有内容以提高性能的详细步骤如何?

rbr*_*ito 4

作为自动加载的第一步,我建议您将显式load命令转换为附加到 emacs 应加载的内容列表中的路径,如下所示:

(add-to-list 'load-path (expand-file-name "~/.emacs.d/"))
Run Code Online (Sandbox Code Playgroud)

在 的顶部.emacs,您可以调用其他依赖于加载其他文件的东西,以便找到它们。

特别是为了推迟加载文件,对于(require 'foo)中的每个文件.emacs,您应该将其替换为类似以下内容的内容:

(autoload 'name-of-foo-mode "code-for-foo.el" "Minor/Major mode for foo" t)
Run Code Online (Sandbox Code Playgroud)

您可能必须试验(也许阅读)相应文件的代码,.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)
Run Code Online (Sandbox Code Playgroud)

require但在转向自动加载之前我必须声明的一些声明是:

(require 'reftex)
(require 'post)
(require 'compile)
(require 'textmate)
Run Code Online (Sandbox Code Playgroud)

因此,正如我所说,您可能需要进行一些实验或阅读代码,但最终这是值得的,因为如果您经常调用 emacs,它会为您节省一些时间。