【问题标题】:Can't launch `lein` REPL in Emacs无法在 Emacs 中启动“lein”REPL
【发布时间】:2012-11-20 05:53:07
【问题描述】:
在 Emacs 中,当使用 clojure-mode 时,我应该能够使用 C-c C-z 启动 REPL。但是,每当我尝试时,我都会收到错误消息:
Searching for program: no such file or directory: lein
我在/usr/local/bin 中安装了lein(通过brew)并且/usr/local/bin 在我的PATH 中(甚至Emacs 都这么说,通过eval-expression (getenv "PATH"))。
我错过了什么?
【问题讨论】:
标签:
emacs
clojure
leiningen
【解决方案1】:
啊! PATH 环境变量不是 emacs 搜索路径的全部和全部。还有“执行路径”。显然是mostly the same thing but not exactly。
无论如何,添加:
(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-path 看起来像这样(简化示例):
("/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)。