Slime mode 快捷键集合

Table of Contents

最后更新:2014-09-28

1. 查找定义

跳转到符号定义处:

M-.

在新窗口中跳转到其定义,和上面命令不同的就是会在新窗口中打开:

C-x 4 .

跳转并在另一个框架中编辑器定义(我不是很明白这个功能):

C-x 5.

回到执行的光标处:

M-.

M-, 或 M-*,如果 M-. 多次执行,那就重复回溯。

使用 ETAGES 寻找定义:

M-x slime-edit-definition-with-etags

2. 求值

从 MiniBuffer 读取表达式:

C-c-:

执行当前 toplevel 的 form:

C-M-x

对光标之前的 S 表达式求值:

C-x C-e

对选中的表达式求值:

C-c C-r

类似 C-x C-e,但它会把求值结果打印到一个新的 buffer 中,方便复制结果等等:

C-c C-p

单独编辑可以被 setf 的值:

C-c E

以上,会启动一个临时 buffer 编辑,然后 C-c C-c 应用这个新值,可以避免在 REPL 下手动写 setf 设置。

对光标前的表达式求值并将结果打印到 buffer 里:

C-x M-e

注意:Slime 代码默认被注释了的,无法用。

取消函数的定义,这个很有用,让 core 中定义的函数失效:

C-c C-u

3. 补全

支持 Emacs 的三种补全模式

  • 推荐:C-M-i
  • M-Tab,不是很推荐,因为一般被输入法占用
  • M-/

4. 文档帮助(C-c C-d 打头的组合键)

显示光标所在的符号的描述信息:

C-c C-d d

显示光标所在的函数的描述信息:

C-c C-d f

搜索符号的文档字符串(显示全部匹配),默认包括外部变量:

C-c C-d a

如果要默认包含所有内部符号:

C-c C-d z

显示包内的结果,等于还可以查找有哪些包:

C-c C-d p

Hyperspec 相关

显示光标所在处符号的 Hyperspec 文档:

C-c C-d h

通过浏览器打开,可以配置 w3m。

查找 format 里控制符的文档,这个功能很霸气,说明 format 函数在 Common Lisp 中的地位:

C-c C-d ~

查找读取宏的文档:

C-c C-d #

5. 宏扩展命令

将光标处的宏展开一次(一层):

C-c C-m

将光标处的宏完全展开:

C-c M-m

6. 中止/恢复

中断 Lisp 进程(比如中断死循环等等):

C-c C-b

重启:

M-x slime-restart-inferior-lisp

同步到当前包的工作目录,比如在编辑另外个目录下的文件,现在要 REPL 切换到该目录下:

M-x slime-sync-package-and-default-directory

设置当前 REPL 所在包:

C-c C-p

改变 REPL 目录:

M-x slime-cd

打印出当前目录:

M-x slime-pwd

7. 分析

触发对某个函数的分析:

M-x slime-toggle-profile-fdefinition

分析某个包里的函数:

M-x slime-profile-package

分析所有名字含某个字符串的函数:

M-x slime-profile-by-substring

停止所有分析:

M-x slime-unprofile-all

报告分析结果:

M-x slime-profile-report

重置分析报告:

M-x slime-profile-reset

显示当前正在分析的函数:

M-x slime-profiled-functions

8. 编译

编译光标所在的 toplevel 形式:

C-c C-c

如果 C-u 加前缀参数为正数,表示最小化调试编译,方便调试;如果是负数,编译速度会被优化。

编译文件,然后加载:

C-c C-k

编译文件,只编译不加载:

C-c M-k

调用 load 函数加载:

C-c C-l

编译选中的表达式:

M-x slime-compile-region

查看一次编译中所有的消息:

  • 查看上一条编译器消息(光标移上去),M-p
  • 查看下一条编译器消息(光标移上去),M-n

删除(缓存区)所有提示信息:

C-c M-c

访问错误消息(不是 Slime 命令),显示在一个临时缓存区中,访问上一条错误消息:

previous-error

访问下一条错误消息:

next-error

9. Shadow 命令(使用的 inf-lisp.el)

这个功能暂时对我用处不大。

帮助(SBCL 无法用):

使用前先 M-x run-lisp,再切换到 inferior-lisp Buffer

列参数:

C-c C-a

10. Disassembly

显示光标处函数的汇编代码:

C-c M-d

对光标的函数 trace:

C-c C-t

停止 trace:

M-x slime-untrace-all

11. 检查

查看在 Mini Buffer 输入表达式的返回值的更详细信息:

M-x slime-inspect(官方文档的快捷键 C-c l无效)

相关操作键如下:

操作键 功能说明
回车 如果光标处是一个值,可以继续递归查看
d 查看光标处的描述
v 简单模式和冗余模式切换
l 向前返回(即按回车的地方)
n l 的相反,又再次进入
g 再次 inspect(但看不出效果来)
q 关闭 inspect Buffer
p 在另外个 buffer 里打印对象
. 查看光标处对象的源码(很多内置对象没法看源码啊)
Tab 可查看对象之间的移动
> 取得所有查看器的内容并移动到最后(没弄明白什么意思)
M-回车 光标后所有在“*”变量里的值存起来,可在 REPL 访问(没弄明白)

12. 交叉引用(C-c C-w 打头的组合键)

注意目前 SBCL 支持 XREF(但只支持部分)。

显示某函数被哪些函数调用:

C-c C-w c

显示该函数调用了哪些函数(目前 SBCL 不支持):

C-c C-w w

显示某全局变量被引用的情况:

C-c C-w r

显示某全局变量被其他函数绑定情况:

C-c C-w b

显示对某全局变量的赋值(目前 SBCL 不支持):

C-c C-w s

显示某个宏被其他函数调用情况:

C-c C-w m

获得某个类的所有方法:

M-x slime-who-specializes

列出某个函数的所有调用者(Slime 备用功能)

C-c <

列出一个函数调用的所有函数(Slime 备用功能)

C-c >

XREF 缓冲区命令

在另个窗口显示光标处符号的定义:

回车或者空格(我本地都是绑定的 slime-goto-xref 函数),跳转过去。

保持在XREF缓冲区(和官方文档说法不一样,回车不行):

M-x slime-show-xref

重编译光标所在的函数(官方文档说这个组合键可编译所有列出的定义,我这里不行):

C-c C-c