Не удается запустить "lein" REPL в Emacs
В Emacs, при использовании clojure-mode
, я должен иметь возможность запускать REPL с C-c C-z
. Однако, когда я пытаюсь, я получаю сообщение об ошибке:
Searching for program: no such file or directory: lein
У меня lein
установлен в /usr/local/bin
(через brew
) и /usr/local/bin
находится в моем PATH
(даже Emacs говорит так, через eval-expression (getenv "PATH")
).
Что мне не хватает?
Ответы
Ответ 1
Ах! Переменная среды PATH
не является конечным и всевозможными способами поиска emacs. Там также "exec-path". По-видимому, это в основном то же самое, но не точно.
В любом случае добавив:
(add-to-list 'exec-path "/usr/local/bin")
В мой .emacs.d/init.el
(или .emacs
, если это так, как вы катитесь), я очистил все для меня. Документ, связанный выше, предлагает нечто более всеобъемлющее, например:
(setenv "PATH" (concat (getenv "PATH") ":/usr/local/bin"))
(setq exec-path (append exec-path '("/usr/local/bin")))
Сначала попробую (проще) add-to-list
. Но YMMV.
Ответ 2
У меня была такая же проблема, и я начал исследовать, что было не так.
Вскоре я обнаружил, что мой exec-путь выглядит следующим образом (упрощенный пример):
("/usr/local/bin /bin /sbin").
Это список с одной длинной строкой вместо списка отдельных путей.
Моя переменная env PATH выглядела точно такой же. Очевидно, проблема возникла из моей оболочки.
Я использую ракушку. Это разделитель переменных PATH - это просто пробел.
Пакет exec-path-from-shell, который я использую, не может его проанализировать.
Я исправил это, добавив это в мой .emacs.d/init.el:
(setq exec-path (split-string (car exec-path)))
Обновление:
В итоге это был устаревший пакет exec-path-from-shell. Используйте версию 1.8. Он хорошо работает с рыбой (и tcsh).