假设您正在运行 emacs 并已从
CVS 并安装它。这对于任何 Linux 发行版都应该很容易; apt-get install emacs slime 为我做。 (您还应该安装 SBCL,最好的 Common Lisp 实现。)
开箱即用的 SLIME 不再有什么作用,所以它需要
配置。配置 emacs 在您的 ~/.emacs 文件中完成。
访问那个文件(C-x C-f ~/.emacs)。我有这样的东西,
它加载了各种好东西:
(eval-after-load "slime"
'(progn
(setq slime-lisp-implementations
'((sbcl ("/usr/bin/sbcl"))
(ecl ("/usr/bin/ecl"))
(clisp ("/usr/bin/clisp"))))
(slime-setup '(
slime-asdf
slime-autodoc
slime-editing-commands
slime-fancy-inspector
slime-fontifying-fu
slime-fuzzy
slime-indentation
slime-mdot-fu
slime-package-fu
slime-references
slime-repl
slime-sbcl-exts
slime-scratch
slime-xref-browser
))
(slime-autodoc-mode)
(setq slime-complete-symbol*-fancy t)
(setq slime-complete-symbol-function
'slime-fuzzy-complete-symbol)))
(require 'slime)
如果您的“站点目录”中没有安装 SLIME,您将
还想在这些行之前添加:
(add-to-list 'load-path "~/elisp/slime/")
(add-to-list 'load-path "~/elisp/slime/contrib")
(当然,将这些路径更改为正确的位置。)
关键部分是 slime-setup,它加载了各种可选
模块,包括 REPL。 (我也考虑花哨的缩进,
和自动文档必不可少。)
无论如何,您可以使用 M-x
eval-buffer 将其加载到正在运行的 emacs 中,或者将点放在每个 sexp 中并按下
C-M-x。 (也可以指向sexp的末尾,按C-x
C-e。在Emacs中评估Emacs Lisp的方法有很多种,
但这与学习 CL 并不真正相关。)
此时,您应该可以输入M-x slime 并被带到
你的 REPL。在此之前,您的 lisp 将被加载,SLIME 将
告诉它编译 Swank(SLIME 的 CL 端),你会看到
发生。不过,这只发生一次,下次 SLIME 将启动
更快。
在 REPL 中,您可以键入 Common Lisp 命令并查看结果
他们的评价。按 TAB 完成某事会弹出一个
可能完成的窗口;这是智能完成,所以输入
像“d-b”这样的东西会弹出一个列表,其中包含
“解构绑定”。很有帮助。 M-/ 也将完成符号
你已经在 Emacs 中的某个地方输入过;另一个美好的时光
保护程序。 (这在 Emacs 中无处不在,顺便说一句,被称为“动态
缩写扩展”。)
之前你说 REPL 很无聊,所以让我们打开一个真实的文件。
按C-x C-f test.lisp。毫不奇怪,这将打开一个
缓冲区编辑test.lisp,第一次保存时会创建
文件 (C-x C-s)。这个 Lisp 文件知道 SLIME,所以任何东西
您键入的内容可以很容易地被正在运行的 Lisp 验证。标签完成,
课堂检查、互动测试等一应俱全。
例如,输入(+ 1 2) 之类的内容,然后按C-x C-e。你
将在底部看到由正在运行的 Lisp 评估的结果
的窗户。这使您可以在键入时测试单个表达式
将它们放入文件中。
下一步是写一个完整的函数,也许:
(defun my-1+ (x)
(+ x 1))
您可以通过多种方式将此函数加载到正在运行的 Lisp 中;
我通常使用C-M-x。您现在可以改回 REPL 缓冲区
(C-x b *slime-repl sbcl* 或类似名称)并输入 (my-1+ 42) 并查看
结果43打印出来了。
将函数带入运行的 Lisp 的另一种方法是编译
并使用C-c C-k 加载整个文件。
无论如何,这就是使用 SLIME 和 Emacs 的基础知识。有
显然还有更多可用的功能,但这应该给你
用 SLIME 体验 Lisp 编程。我要提的最后一件事,
Emacs 在很大程度上是自记录的,所以如果你想了解更多,Emacs
可以帮你。在您的 Lisp 缓冲区中,您可以键入 C-h m 来获取
编辑 Lisp 时可以使用的完整命令列表。你可以点击
获取有关每个函数的更多信息的链接。
玩得开心!