Flycheck сообщает «Не удается открыть файл загрузки», несмотря на правильный список «путь загрузки» - PullRequest
0 голосов
/ 24 сентября 2019

В моем ~/.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 Ответ

1 голос
/ 25 сентября 2019

Flycheck не запускает код, а компилирует его (чтобы получить предупреждения компилятора).Когда компилятор обрабатывает (require 'init-vars), он попытается загрузить init-vars из «текущего» * ​​1005 *, но, поскольку первая строка была скомпилирована, а не выполнена, сеанс 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.

...