尽管有正确的“加载路径”列表,Flycheck报告“无法打开加载文件”

时间:2019-09-24 18:33:17

标签: emacs flycheck

在我的~/.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无法正常工作。

1 个答案:

答案 0 :(得分:1)

Flycheck不会运行代码,而是对其进行编译(以获取编译器的警告)。当编译器处理(require 'init-vars)时,它将尝试从“当前” init-vars加载load-path,但是由于第一行是编译而不是执行的,因此仍在编译文件的Emacs会话中具有默认的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