Flycheck 报告 "Cannot open load file" 尽管 "load-path" 列表正确
Flycheck reports "Cannot open load file" despite proper "load-path" list
在我的 ~/.emacs.d/init.el
中,我只有三行:
(push (expand-file-name "lisp" user-emacs-directory) load-path)
(require 'init-vars)
(provide 'init)
在我的 ~/.emacs.d/lisp/init-vars.el
中,我有以下三行:
(require 'dired)
(setq dired-use-ls-dired nil)
(provide 'init-vars)
Flycheck 报错 line 2 of ~/.emacs.d/init.el
:
Cannot open load file: No such file or directory, init-vars
我在这里错过了什么?
如果我将行更改为 (require 'init-vars (expand-file-name "lisp/init-vars.el" user-emacs-directory))
,那么错误就消失了。我不明白为什么 load-path
不起作用。
Flycheck 不会 运行 代码,而是对其进行编译(以获取编译器的警告)。当编译器处理 (require 'init-vars)
时,它将尝试从 "current" load-path
加载 init-vars
但是由于第一行是编译而不是执行,文件所在的 Emacs 会话compiled 仍然具有默认的 load-path
值,并添加了额外的 ~/.emacs.d/lisp
目录。
解决问题的一种方法是 eval-when-compile
:
(eval-when-compile
(push (expand-file-name "lisp" user-emacs-directory) load-path))
顺便说一句,我建议你在这里使用 add-to-list
而不是 push
(否则,使用 cl-pushnew
),这样重复执行该代码就不会不断添加冗余副本该目录到您的 load-path
.
在我的 ~/.emacs.d/init.el
中,我只有三行:
(push (expand-file-name "lisp" user-emacs-directory) load-path)
(require 'init-vars)
(provide 'init)
在我的 ~/.emacs.d/lisp/init-vars.el
中,我有以下三行:
(require 'dired)
(setq dired-use-ls-dired nil)
(provide 'init-vars)
Flycheck 报错 line 2 of ~/.emacs.d/init.el
:
Cannot open load file: No such file or directory, init-vars
我在这里错过了什么?
如果我将行更改为 (require 'init-vars (expand-file-name "lisp/init-vars.el" user-emacs-directory))
,那么错误就消失了。我不明白为什么 load-path
不起作用。
Flycheck 不会 运行 代码,而是对其进行编译(以获取编译器的警告)。当编译器处理 (require 'init-vars)
时,它将尝试从 "current" load-path
加载 init-vars
但是由于第一行是编译而不是执行,文件所在的 Emacs 会话compiled 仍然具有默认的 load-path
值,并添加了额外的 ~/.emacs.d/lisp
目录。
解决问题的一种方法是 eval-when-compile
:
(eval-when-compile
(push (expand-file-name "lisp" user-emacs-directory) load-path))
顺便说一句,我建议你在这里使用 add-to-list
而不是 push
(否则,使用 cl-pushnew
),这样重复执行该代码就不会不断添加冗余副本该目录到您的 load-path
.