gpt4 book ai didi

*first* require 语句上的 emacs 字节编译错误

转载 作者:行者123 更新时间:2023-12-04 23:50:33 28 4
gpt4 key购买 nike

我的 emacs init.el 文件有问题,这让我发疯。

我的 init.el 将加载路径设置为一堆加载项,然后调用一些需求。

Emacs 加载正常并且一切正常,但是对于elisp 的flycheck 将init.el 中的第一个require 语句标记为“无法打开加载文件”,如果我进行字节编译,它也会给我同样的错误。

我创建了最简单的示例来重现问题,并在 MacOs X 和 Ubuntu 上使用 emacs 24.3 (9.0) 对其进行了测试。两个测试都给了我同样的错误。

这是示例:

;; init.el --- entry point for configuration

(add-to-list 'load-path "~/.emacs.d/.")
(add-to-list 'load-path "~/.emacs.d/exec-path-from-shell")
(require 'test)
(require 'exec-path-from-shell)

;; test.el --- test lives in "~/.emacs.d"
(defvar test-var "this is test")
(provide 'test)

错误 :
vagrant@elsa:~/.emacs.d$ pwd
/home/vagrant/.emacs.d
vagrant@elsa:~/.emacs.d$ sudo make
emacs --batch --eval "(byte-recompile-directory \".\" 0)"
Loading 00debian-vars...
Loading /etc/emacs/site-start.d/50autoconf.el (source)...
Checking /home/vagrant/.emacs.d...
Compiling /home/vagrant/.emacs.d/init.el...

In toplevel form:
init.el:5:1:Error: Cannot open load file: test
Checking /home/vagrant/.emacs.d/auto-save-list...
Checking /home/vagrant/.emacs.d/bin...
Checking /home/vagrant/.emacs.d/exec-path-from-shell...
Done (Total of 0 files compiled, 1 failed, 2 skipped in 2 directories)
vagrant@elsa:~/.emacs.d$

如果我改变了 require 语句的顺序 ()
(require 'exec-path-from-shell)
(require 'test)

错误将变为:
In toplevel form:
init.el:5:1:Error: Cannot open load file: exec-path-from-shell

到底是怎么回事?我究竟做错了什么?

问候, 罗马

最佳答案

字节编译器通常不会评估顶级表单。 require是一个特例,但 add-to-list调用,扩展 load-path , 对字节编译器不可见。

您需要将它们包装在 eval-and-compile 中:

(eval-and-compile
(add-to-list 'load-path "~/.emacs.d/.")
(add-to-list 'load-path "~/.emacs.d/exec-path-from-shell"))

这会强制字节编译器评估这些调用,因此 load-path在编译时正确扩展。

请注意您 不应添加 ~/.emacs.dload-path ,如果你这样做,字节编译器会警告你。

您可能应该只使用 package.el 来安装软件包。它会自动处理所有这些。

关于*first* require 语句上的 emacs 字节编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23324760/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com