在.emacs文件中通过自动加载替换require语句以提高性能


8

根据这些职位:

可以以某种方式替换文件中的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")
...

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

如何用autoload功能替代一切以提高性能的详细步骤?

Answers:


4

作为自动加载的第一步,我建议您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可以节省一些时间。


1

我发现快速启动emacs的最佳方法是守护进程。这些说明与emacs23有关。先前的版本具有服务器/客户端功能,但配置起来可能会更加困难。首次登录桌面时,执行emacs --daemon。此后,每当我需要emacs时,我都会执行,emacsclient -c filename并立即弹出。在服务器/客户端模式下使用emacs时,您需要改掉使用C-x C-cexit 的习惯,而不必输入C-x #。FWIW,这是emacs23似乎可以解决的问题,因为我有时会发现自己打字C-x C-c而没有杀死服务器进程,但是我仍然坚持我的旧习惯。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.