Common Lisp - 配置slime和emacs

时间:2013-06-30 20:35:43

标签: emacs elisp common-lisp slime

我正在为emacs配置slime。到目前为止,我已经阅读了常见的lisp的基本功能,例如C-c C-q调用命令slime-close-parens-at-point,该命令将适当数量的parens放在鼠标所在的位置。另一个看起来很酷的命令是由C-c C-c调用的,它会将你正在编辑的代码传递给REPL,然后“编译”它。

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

无论如何,我已经通过slime下载了M-x list-packages并且似​​乎没有此功能(C-h w,然后这些命令中的任何一个都告诉我这些命令确实存在)。所以,我看到了许多其他粘液扩展,例如slime-repl', 'slime-fuzzy' and 'hippie-expand-slime'. So I again used 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文件中,我没有加载必要的文件?我是否需要安装额外的包?
  2. 或者,如果您有更好的想法,请告诉我们! 如果您需要更多信息,请告诉我们!非常感谢所有帮助!

1 个答案:

答案 0 :(得分:3)

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

slime-repl本身不起作用,它需要服务器端的相应插件。你应该确保swank目录中有swank-repl.lisp。这是swank-repl.lisp,包括“CREATE-REPL”功能。

你的粘液复制不起作用。所以你在emacs中看不到* slime-repl *缓冲区。

我更喜欢使用官方GIT仓库中的SLIME(https://github.com/slime/slime)。