功能按键
M(eta)
,在 Mac 下为 Option
键
s(uper)
,在 Mac 环境下为左 Command
键
S(hift)
C(trl)
基本操作
C-x C-f
打开文件
C-x C-s
保存文件
C-x C-c
退出Emacs
M-w
复制
C-w
剪切
C-y
粘贴
M-x
执行命令
C-x C-b
切换Buffer
C-c p f
目录查找文件
C-c s
交换2个Window
M-c
光标位置开始的首字母改为大写
M-u
光标位置开始的单词改为大写
M-l
光标位置开始的单词改为小写
C-x C-u
选定区域改为大写
C-x C-l
选定区域改为小写
Emacs Lisp
C-x C-e
执行最后一个表达式
C-c C-z
打开Elisp REPL
C-c C-c
执行Elisp代码块
C-c C-b
执行整个Buffer
Common Lisp(Slime)
M-x slime
启动slime
C-- M-x slime
启动slime并选择要启动的lisp实现(有些设置可能是 M-- M-x slime
)
M-p
上一条被输入 REPL 执行的表达式
M-.
跳转到符号定义处
C-x 4 .
在新窗口中跳转到其定义,和上面命令不同的就是会在新 Buffer 中打开
C-x 5 .
跳转并在另一个窗口中编辑,和上面命令不同的就是会新开一个 Emacs 窗口
M-,
回到执行的光标处
C-c-:
从 MiniBuffer 读取表达式并求值
C-M-x
执行当前 toplevel 的 form
C-x C-e
对光标之前的 S 表达式求值
C-c C-r
对选中的表达式求值
C-c C-p
类似 C-x C-e
,但它会把求值结果打印到一个新的 Buffer 中
C-c E
单独编辑可以被 setf
的值,会启动一个临时 Buffer 编辑,然后 C-c C-c
应用这个新值,可以避免在 REPL 下手动写 setf
设置
C-c C-u
取消函数的定义,这个很有用,可以让 core 中定义的函数失效
C-M-i
或 Tab
自动补全
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
显示包内的结果,等于还可以查找有哪些包
C-c C-d h
显示光标所在处符号的 Hyperspec 文档
C-c C-d `
查找 format 里控制符的文档
C-c C-d #
查找读取宏的文档
C-c C-m
将光标处的宏展开一次(一层)
C-c M-m
将光标处的宏完全展开
C-c C-b
中断 Lisp 进程(比如中断死循环等等)
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
改变 REPL 目录
M-x slime-pwd
打印出当前目录
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
显示当前正在分析的函数
C-c C-c
编译光标所在的 toplevel 形式
C-c C-k
编译文件,然后加载
C-c M-k
编译文件,只编译不加载
C-c C-l
调用 load 函数加载
M-x slime-compile-region
编译选中的表达式
C-c M-d
显示光标处函数的汇编代码
C-c C-t
对光标的函数 trace
M-x slime-untrace-all
停止 trace
C-c C-w c
显示某函数被哪些函数调用
C-c C-w w
显示该函数调用了哪些函数
C-c C-w r
显示某全局变量被引用的情况
C-c C-w b
显示某全局变量被其他函数绑定情况
C-c C-w s
显示对某全局变量的赋值
C-c C-w m
显示某个宏被其他函数调用情况
M-x slime-who-specializes
获得某个类的所有方法
C-c <
列出某个函数的所有调用者
C-c >
列出一个函数调用的所有函数
Scheme
C-c C-z
打开 Geiser REPL
C-c C-c
执行当前定义
C-c C-\
插入 λ
M-.
查看接口定义
M-,
返回查看定义前的位置
Racket
C-c C-c
运行 Racket REPL
C-c C-z
打开 Racket REPL
C-M-y
插入 λ
C-x C-e
发送最后一个 S 表达式到 REPL
C-M-x
发送当前定义到 REPL
C-c C-d
查询 Racket 官方文档
C-c C-p
改变 S 表达式括号形状 () [] {}
C-M-.
查看模块定义
M-.
查看接口定义
M-,
返回查看定义前的位置
Clojure(Cider)
C-c C-x C-j C-j
启动 Cider nREPL
C-c C-z
切换 Buffer 和 nREPL,如果使用 C-u
前缀会将 nREPL 的命名空间切换到与当前 Buffer 匹配的命名空间
C-c C-k
运行当前整个 Buffer
C-c C-e
运行当前光标所在的前一个表达式
C-c M-p
将当前光标所在的前一个表达式输出到 nREPL 中
C-c C-c
运行当前光标所在的顶层表达式
C-c C-b
中断当前代码执行
C-c C-m
对当前光标位置的表达式执行 macroexpand-1
C-c M-m
对当前光标位置的表达式执行 macroexpand-all
C-c C-l
执行加载源代码文件
C-c C-d d
查询当前光标位置表达式的文档
C-c C-d j
在默认浏览器里查看当前光标位置表达的 JavaDoc
C-c C-d a
Apropos 搜索 functions/vars
C-c M-i
Inspect 当前光标位置的表达式
C-c C-u
清除符号定义
C-c M-t v
开启函数 Tracing
C-c M-t n
开启命名空间 Tracing
M-.
跳转到定义处
M-,
返回之前的跳转处
C-c C-t
测试相关指令
C-u C-M-x
打开调试器
C-M-x
撤销调试器
C-c C-= v
开启函数 Profiling
C-c C-= n
开启命名空间 Profiling
C-c C-= s
展示 Profiling 报表
C-c C-t C-p
运行当前项目所有测试用例
C-c C-t C-n
运行当前命名空间下的所有测试用例
C-c C-t C-l
运行当前所有已加载的测试用例
JavaScript
M-.
跳到函数声明
M-,
跳回光标处
C-c C-o
折叠/展开当前代码块
C-c C-f
折叠/展开所有函数块
C-c C-t
折叠/展开所有注释
C-c C-m
代码反射
C-c C-d
插入注释文档
Org-mode
C-c '
打开 major mode 来编辑 src 里的源码
C-c C-c
执行 ...
之间的代码
C-c x
导出项目HTML