如何在.emacs.d目录中对所有内容进行字节编译?

时间:2009-08-01 18:34:01

标签: emacs elisp bytecode dot-emacs

我决定查看Emacs,我非常喜欢它。现在,我正在使用Emacs Starter Kit,这种方式提供了更好的默认设置和一些很好的自定义功能来默认安装Emacs。

我稍微定制了一下,添加了yasnippetcolor-themesunbound等内容。我已经设置了一个github repository,我保留了所有的自定义设置,以便我可以从多个地方访问它们,或者万一我们丢失了.emacs.d目录。

所有这一切都非常好,但是有一个问题:Emacs大约需要1-2秒才能加载。 AFAIK我可以使用M-x byte-compile-file编译各个.el文件到.elc,它可以工作。但是有很多.el文件,我想知道是否有办法用简单的命令或其他东西编译它们,以加快Emacs的加载速度。我的Emacs并不总是打开,我经常打开和关闭它,特别是在我将它设置为Total Commander中的编辑命令的默认编辑器以便更快地习惯它(是的,windows xp这里)。

我的Emacs版本是22.3。是的,没有任何自定义的默认Emacs安装会立即启动。

我不确定在加载时,首选哪个版本,.el或编译.elc的方式是O.o

那么,是否有一个elisp命令或Emacs命令行开关使Emacs在.emacs.d目录中进行字节编译?

6 个答案:

答案 0 :(得分:199)

C-u 0 M-x byte-recompile-directory

将编译目录和下面所有子目录中的所有.el文件。

C-u 0部分是为了让它不会询问每个没有.elc对应文件的.el文件。

答案 1 :(得分:43)

为了在每次启动emacs时自动字节编译需要字节编译的所有内容,我在对load-path文件顶部的.emacs进行更改后添加以下内容:

(byte-recompile-directory (expand-file-name "~/.emacs.d") 0)

令人惊讶的是,它不会增加我的启动时间(除非需要编译某些内容)。

为了加快我的emacs速度,我首先使用profile-dotemacs.el确定了慢速部分,然后将其替换为autoloads

答案 2 :(得分:23)

您可以使用--batch标志从命令行重新编译。

要重新编译所有内容,请执行

emacs --batch --eval '(byte-recompile-directory "~/.emacs.d")'

或从Makefile重新编译单个文件,

emacs --batch --eval '(byte-compile-file "your-elisp-file.el")'

答案 3 :(得分:17)

这有点摇摆不定,但为了解决加载缓慢的问题,你可以在Emacs 23中使用新的守护进程功能。

  

“如果你有很多支持包,   emacs启动可能有点慢。   但是,emacs 23带来了emacs   --daemon,它允许您在后台启动emacs(例如   当你登录)。你可以马上   弹出新的emacs窗口(框架)   emacsclient。当然,你可以   已经有一个emacs'服务器'了   旧版本,但能够   在后台启动它就可以了   一个更好的解决方案“

来自http://emacs-fu.blogspot.com/2009/07/emacs-23-is-very-near.html

答案 4 :(得分:2)

对于我使用spacemacs,命令为mysqlnd。命令spacemacs/recompile-elpa不编译任何文件。

答案 5 :(得分:1)

我使用的命令是M-x byte-force-recompile RET,然后询问目录,例如,我将其命名为~/.emacs.d/elpa/。然后,它会重新编译其中的所有内容,通常无需先删除.elc文件或以其他方式对其进行处理。