功能按键
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