我决定去看看 Emacs,我非常喜欢它。现在,我正在使用 Emacs Starter Kit,它为 Emacs 的默认安装提供了更好的默认设置和一些不错的自定义设置。
我对其进行了一些定制,添加了一些内容,例如 yasnippet、color-themes、unbound 和其他内容。我设置了一个 github repository 来保存所有自定义项,以便我可以从多个位置访问它们,或者以防万一出现问题并且我丢失了我的 .emacs.d 目录。
这一切都很好,但是有一个问题:Emacs 大约需要 1-2 秒才能加载。 AFAIK 我可以使用 Mx 字节编译文件将单个 .el 文件编译为 .elc,它可以工作。但是有很多.el文件,不知道有没有办法用一个简单的命令什么的把它们全部编译,加快Emacs的加载速度。我的 Emacs 并不总是打开,我经常打开和关闭它,尤其是在我将它设置为 Total Commander 中编辑命令的默认编辑器以更快地习惯它之后(是的,这里是 windows xp)。
我的 Emacs 版本是 22.3。是的,没有任何自定义的默认 Emacs 安装会立即启动。
我不确定加载时首选哪个版本,.el 或编译的 .elc 顺便说一下 Oo
那么,是否有一个 elisp 命令或 Emacs 命令行开关来使 Emacs 对 .emacs.d 目录中的所有内容进行字节编译?
C-u 0 M-x byte-recompile-directory
将编译目录和下面所有子目录中的所有 .el 文件。
C-u 0
部分是让它不询问没有 .elc 对应项的每个 .el 文件。
为了在每次启动 emacs 时自动对需要字节编译的所有内容进行字节编译,我在对 load-path
所做的更改之后将以下内容放在了 .emacs
文件的顶部:
(byte-recompile-directory (expand-file-name "~/.emacs.d") 0)
令人惊讶的是,它并没有增加我的启动时间(除非需要编译一些东西)。
为了加快我的 emacs 速度,我首先使用 profile-dotemacs.el 识别慢速部分,然后用 autoloads 替换它们。
您可以使用 --batch
标志从命令行重新编译。
要重新编译所有,请执行
emacs --batch --eval '(byte-recompile-directory "~/.emacs.d")'
或从 Makefile 重新编译单个文件,
emacs --batch --eval '(byte-compile-file "your-elisp-file.el")'
emacs -Q --batch -f batch-byte-compile *.el foo/*.el
- 它不像 byte-recompile-directory 那样递归。
这与问题有点摇摆不定,但要解决加载缓慢的问题,您可以使用 Emacs 23 中的新守护程序功能。
“如果你有很多支持包,那么emacs启动可能会有点慢。但是,emacs 23带来了emacs --daemon,它可以让你在后台启动emacs(例如当你登录时)。你可以立即弹出“
来自http://emacs-fu.blogspot.com/2009/07/emacs-23-is-very-near.html
我使用的命令是 M-x byte-force-recompile RET
,然后它会询问目录,例如,我给它 ~/.emacs.d/elpa/
。然后它会重新编译那里的所有内容,通常不需要先删除 .elc
文件或以其他方式弄乱它。
对于我使用 spacemacs,命令是 spacemacs/recompile-elpa
。命令 byte-recompile-directory
不编译任何文件。
不定期副业成功案例分享
C-u 0
的相同命令(又名C-0
,顺便说一句)。这将仅对那些比其字节编译版本更新的源文件进行字节编译。FORCE
重新编译已经具有关联“.elc”的文件,即使它们不比源文件旧:M-: (byte-recompile-directory "/the/directory/" 0 t)
byte-force-recompile
命令获取FORCE
选项。