0

在我的~/.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不起作用。

4

1 回答 1

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.

于 2019-09-24T22:10:18.733 回答