Emacs Lisp无法启动。

3
我正在尝试在emacs中设置slime模式以使用common lisp。当我尝试使用M-x slime启动slime时,会出现错误消息:process inferior-lisp not running。因此,我检查了变量inferior-lisp-program的值,结果为"/opt/sbcl/bin/sbcl"。sbcl是steel bank common lisp的实现缩写。请注意,该变量在文件slime.el中定义。由于我没有在我的机器上安装sbcl(甚至前一个目录在我的机器上都不存在),因此这将无法工作。我有clisp实现,位于目录/opt/local/bin/中。我尝试通过以下方式更改变量inferior-lisp-program的值:(setq inferior-lisp-program '/opt/local/bin/clisp/)。但是,这并没有起作用,我不知道还有什么其他尝试方法。
  1. 我该如何运行inferior-lisp,从而让slime工作?

编辑:以下是一些额外的信息,我认为可能会有所帮助。如果我尝试通过执行M-x run-lisp在emacs中启动common lisp,我会从emacs获得以下输出:

(progn (load "/Users/s2s2/.emacs.d/slime/swank-loader.lisp" :verbose t) (funcall \
(read-from-string "swank-loader:init")) (funcall (read-from-string "swank:start-s\
erver") "/var/folders/wf/yjgymt8j14v2tqwjnny68wq00000gn/T/slime.28222"))          

Can't exec program: /opt/sbcl/bin/sbcl                                            

Process inferior-lisp exited abnormally with code 1                               
Can't exec program: /opt/sbcl/bin/sbcl                                            

Process inferior-lisp exited abnormally with code 1

希望这有所帮助!非常感谢所有的帮助!

我自己不使用SLIME,所以我相信其他人会有更好的答案,但我建议使用M-x apropos-value RET /opt/sbcl/bin/sbcl RET来尝试找出该值最初来自哪里(因此需要配置哪个变量)。 - phils
实际上,您可能可以为其提供引用值"/opt/sbcl/bin/sbcl",以获取更准确的匹配,如果未引用该版本会有很多命中。 - phils
@phils,您能解释一下如何“给它添加引号值”吗?我对Emacs还不是很熟悉。尽管如此,我已经掌握了许多提高效率所必需的基础知识 :) - CodeKingPlusPlus
2
我怀疑以下代码无法正常工作:(setq inferior-lisp-program '/opt/local/bin/clisp/),因为你将变量设置为一个符号,而它应该是一个字符串。尝试使用(setq inferior-lisp-program "/opt/local/bin/clisp/"),或者执行M-x customize-variable RET inferior-lisp-program RET - user725091
哎呀,是的,发现得好。 - user725091
CodeKingPlusPlus:在那种情况下,我确实是指在模式中包括周围的双引号(如评论所示),因为看起来引号可以与之匹配。从huaiyuan的答案来看,它应该已经找到了一个变量匹配该值slime-lisp-implementations - phils
2个回答

6
变量slime-lisp-implementations如果设置,将比inferior-lisp-program拥有更高的优先级。以下是建议的替代方案(请根据需要调整参数):
(setq slime-lisp-implementations
      '((clisp ("/opt/local/bin/clisp" "-q -I"))
        (sbcl  ("/usr/local/bin/sbcl") :coding-system utf-8-unix)))

4

首先要尝试的是在常规的shell窗口中运行该命令-只需在那里键入或复制并粘贴可执行路径,然后查看bash告诉您什么:

$ sbcl < /dev/null
bash: sbcl: command not found
$ clisp < /dev/null
<<clisp splash screen>>
$ which clisp
/usr/bin/clisp

一旦你确定了正确的可执行文件,你就需要设置inferior-lisp

(setq inferior-lisp "/usr/bin/clisp")

注意:

  1. 它应该是一个字符串,而不是一个符号,所以你需要引号"
  2. 它应该指向一个文件,而不是一个目录,所以你的尾部斜线/是错误的。

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