无法在Emacs中启动`lein` REPL

17

在Emacs中,当我使用clojure-mode时,我应该能够使用C-c C-z启动REPL。但每次尝试时,我都会收到以下错误:

在 Emacs 中使用 clojure-mode 时,我应该能够通过按下 C-c C-z 启动 REPL。然而,每次尝试时,我都会遇到以下错误:

Searching for program: no such file or directory: lein

我已经通过brew/usr/local/bin中安装了lein,并且/usr/local/bin已经在我的PATH中(即使是Emacs也是如此,通过eval-expression (getenv "PATH"))。

我还缺少了什么?


我曾经在这里提出过一个类似于你的问题:https://dev59.com/ImYr5IYBdhLWcg3w--4I。也许那个答案能帮到你。;) - Giuliani Sanches
2个回答

38
Ah!PATH 环境变量并非 emacs 搜索路径的全部。还有一个叫做“exec-path”的东西。它似乎大部分情况下与 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。但是结果可能因人而异。


1

我曾经遇到同样的问题并开始调查出错的原因。我很快发现我的exec-path看起来像这样(简化版):

("/usr/local/bin /bin /sbin").

这是一个只有一个长字符串而不是分离路径列表的列表。 我的环境变量PATH看起来完全一样。显然问题来自于我的shell。

我使用fish-shell。它的PATH变量分隔符只是一个空格。 我使用的exec-path-from-shell包无法解析它。 我通过将以下内容附加到我的.emacs.d/init.el文件中进行了修复:

(setq exec-path (split-string (car exec-path)))

更新: 最终发现问题出在过时的exec-path-from-shell包上。请使用1.8版本,它可以很好地与fish(和tcsh)兼容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接