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