在emacs中使用slime模式编辑及测试lisp代码

1 安装slime

参考 https://github.com/slime/slime ,即使用 M-x package-install RET slime RET 然后在你的 .emacs或者是.emacs.d/init.el文件中加入

(setq inferior-lisp-program "sbcl")
(setq slime-contribs '(slime-fancy))

这样就可以了。

2 进入slime模式

在emacs中编辑lisp,使用slime模式,方法:

  1. 进入emacs
  2. M-x slime 进入slime模式,然后就可以键入表达式求值了

3 获得帮助

c-h m "关于这个模式的帮组,会新开一个窗口,其中显示相关的内容及菜单"

c-h b "相关的绑定"

4 获得函数或符号的文档

C-c C-d C-a slime apropos , 函数查找 , 也可以直接用lisp代码 (apropos `string) 来查询所有包含string的函数。

C-c C-d C-f 函数的描述

C-c C-d h 直接在浏览器中打开某个函数的文档 (slime中)

C-c C-d f 函数的描述

C-c C-d d 符号的描述

4.1 描述某个符号

(describe `make-string)

(describe 123,45)

返回符号的文档,符号类别可为 function variable等:

(documentation `first `function)

(documentation `pi `variable)

5 所有的符号

另外在common lisp还有一个宏可以列出所有的symbols,这个宏是 do-symbols (还有一个 do-all-symbols )

以下是列出所有symbols的方法:

(do-symbols (s) (describe s))

要得到输出,可以简单的 sbcl --eval "(do-symbols (s) (describe s))" --quit > tt 即可,这样所有的符号都被输出到tt 文件。

6 列出所有的包

(list-all-packages)

7 列出包中的所有符号

do-symbols 宏接受第二个参数,用于指定包,这样只会遍历给定包中的符号

8 可用库的搜索

可用quicklisp的帮助函数 ql:system-apropos , 如下所示,列出所有包含有vecto的包:

(ql:system-apropos "vecto")

9 编辑文件

在进入slime模式以后,可以关掉交互的窗口,然后在编辑窗口中可使用

C-c TAB 自动补全,选择一个函数后,下面会显示其参数

C-c ] 关闭所有的括号

C-M-a 到函数开始的位置

C-M-e 到函数结束的位置

C-c M-m 展开所有的宏

10 编译

在进入slime模式以后,如果要在非交互的状态下编辑某个文件,可以使用 C-x C-f ,然后指定文件的名字就可以。假设名字为 aa.lisp ,然后在 aa.lisp 中键入函数的定义,假设有如下定义

(defun hello-world () (format t "hello world"))

然后将光标停在这个函数的定义上,键入 C-c C-c 将编译这个函数,并且编译之后这个函数的定义就在交互的窗口可用了,使用 C-c C-z 进入交互模式(或者使用 C-x b 选择进入交互模式),在交互模式中键入 (hello-world) 可见这个函数已经定义了。

在编辑窗口,修改函数定义,再使用 C-c C-c 编译,然后在交互模式中进行验证。

另外如果要编译整个 buffer ,使用 C-c C-k 命令。也可以直接装在整个文件,在交互模式中使用 C-c C-l ,然后选择文件名

如果要在交互模式中装载某个库,也可以在编辑模式中使用 (ql:quickload "cxml") 这样的语句,然后在其上键入 C-c C-c

11 函数跳转

在编辑文件的时候,或者是读代码的时候,经常需要跳转到函数的定义处。要做到这一点,先要编译该文 件,然后在函数上使用 M-. 即可条到函数定义处,要跳回来,使用 ~M-,~ 即可。

注意文件的编译命令是 C-c C-k



本文地址: http://www.bagualu.net/wordpress/archives/6469 转载请注明




发表评论

电子邮件地址不会被公开。 必填项已用*标注