通用Lisp -- 配置Slime和Emacs

4

我正在配置emacs的slime。到目前为止,我已经了解了Common Lisp的基本功能,例如C-c C-q,它会调用命令slime-close-parens-at-point,在鼠标所在位置放置正确数量的括号。另一个看起来很酷的命令是通过C-c C-c调用的,它将你正在编辑的代码传递到REPL缓冲区中,并“编译”它。

为什么这些命令对我不起作用?

无论如何,我通过M-x list-packages下载了slime,但似乎没有这些功能(C-h w然后任何这些命令告诉我这些命令不存在)。因此,我看到了许多其他的slime扩展,例如slime-repl'、'slime-fuzzy'和'hippie-expand-slime'。所以我再次使用M-x list-packages并下载了它们。

但我仍然没有这些命令。以下是与slime相关的我的emacs文件内容:

;;;Common Lisp and Slime                                                                                                                                
(add-to-list 'load-path "/home/s2s2/.emacs.d/elpa/slime-20130626.1151")
(add-to-list 'load-path "/home/s2s2/.emacs.d/elpa/slime-repl-201000404")
(add-to-list 'load-path "/home/s2s2/.emacs.d/elpa/hippie-expand-slime-20130226.1656")
(add-to-list 'load-path "/home/s2s2/.emacs.d/elpa/slime-fuzzy-20100404")

(require 'slime)
(setq slime-lisp-implementations
     `((sbcl ("/usr/bin/sbcl"))
       (ecl ("/usr/bin/ecl"))
       (clisp ("/usr/bin/clisp" "-q -I"))))

(require 'slime-repl)
(require 'slime-fuzzy)
(require 'hippie-expand-slime)

当我执行 M-x slime 命令时,我会在 inferior-lisp 缓冲区中看到以下信息,我可以在其中执行通用的Lisp代码(然而,这不应该是 slime-repl 吗?因为我已要求它)

STYLE-WARNING: redefining EMACS-INSPECT (#<BUILT-IN-CLASS T>) in DEFMETHOD
STYLE-WARNING:
   Implicitly creating new generic function STREAM-READ-CHAR-WILL-HANG-P.
WARNING: These Swank interfaces are unimplemented:
 (DISASSEMBLE-FRAME SLDB-BREAK-AT-START SLDB-BREAK-ON-RETURN)
;; Swank started at port: 46533.

然后会创建一个名为slime-error的缓冲区,其内容如下:

Invalid protocol message:
Symbol "CREATE-REPL" not found in the SWANK package.

  Line: 1, Column: 28, File-Position: 28

  Stream: #<SB-IMPL::STRING-INPUT-STREAM {10056B9C33}>

(:emacs-rex (swank:create-repl nil) "COMMON-LISP-USER" t 5)
  1. 我应该如何修改我的emacs文件以获得这些命令的功能?在我的emacs文件中,我是否没有加载必要的文件?我需要安装额外的包吗?

如果您有更好的想法,请让我知道!如果您需要更多信息,请告诉我!非常感谢您的帮助!


我之前在这里提到了(依我之见)一个简单的设置环境的方法:https://dev59.com/Amcs5IYBdhLWcg3wu2nS#12609066 ,或许你会发现这个有用。 - user797257
1个回答

3

Swank是通用Lisp(在您的情况下,它是SBCL)中作为SLIME后端的服务器。SLIME是Emacs Lisp中的前端。

slime-repl本身无法工作,它需要相应的插件位于服务器端。您应确保swank目录中有swank-repl.lisp,其中包括“CREATE-REPL”函数。

您的slime-repl无法工作。因此,您无法在Emacs中看到*slime-repl*缓冲区。

我更喜欢使用来自其官方GIT存储库的SLIME(https://github.com/slime/slime)。


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