Emacs常用命令的汇总,来自Emacs参考卡片
注意:以下命令中标注的按键,大写的C代表Control,在键盘上通常是Ctrl键,而M代表Meta,在键盘上通常是Alt键,S则代表Shift,在键盘上通常是Shift键,也就是
C |
Control |
M |
Alt |
S |
Shift |
这三个键在Emacs里通常作为组合键的前导按键使用,也就是说,执行一条命令前可能需要按住这个键不放,比如搜索命令是C-s,要执行这个命令首先要按住Ctrl键不放,再按下字母s键;而打开文件命令是C-x C-f,要打开文件就必须按下Ctrl键不放,依次按下x和f(当然也可以按下Ctrl不放再按下x,放开,再按下Ctrl不放再按f);有的命令组合键和非组合键都要用到,比如保存所有文件是C-x s,需要按下Ctrl不放的时候按下x,然后放开所有按键,再按下s;也有两个组合按键一起使用的,比如使用正则表达式进行增量搜索的快捷键是C-S-%,这就要求你同时按下Ctrl和Alt不放开,再按下s。
启动Emacs
在有图形界面的环境下只需要在终端输入Emacs按回车或者找到启动emacs程序的图标打开就可以了。
在没有图形界面的环境或者伪终端下需要使用字符界面的Emacs可以输入emacs -nw,也就是增加一个-nw参数。
挂起Emacs |
C-z |
挂起在图形界面下通常是把Emacs窗口最小化的意思,而在字符界面下则是把Emacs挂起到后台后回到终端,比如在GNU/Linux字符终端下按C-z会回到shell,使用jobs命令可以列出你挂起的所有任务,使用fg可以返回以最后一次挂起的任务,fg %num可以选择回到任意一个被挂起的任务。
退出Emacs |
C-x C-z |
如果没有未保存的文件,那么这条命令会直接退出Emacs程序,否则它会提示是否保存文件。
文件
打开文件 C-x C-f 保存文件 C-x C-s 保存所有文件 C-x s 插入其他文件到当前缓冲区 C-x i 在当前缓冲区打开另一个文件 C-x C-v 另存为文件 C-x C-w
获取帮助
打开快速指南 C-h t 获取按键帮助 C-h k 获取函数帮助 C-h f 打开Emacs帮助手册 C-h r
错误恢复
放弃当前命令或终止正在执行的操作 C-g 恢复因系统崩溃而丢失的文件 M-x
recover-file 撤销上一次操作 C-x u或C-_ 还原缓冲区的内容 M-x
revert-buffer 刷新屏幕 C-l
增量搜索
正向搜索 C-s 反向搜索 C-r 使用正则表达式正向搜索 C-M-s 使用正则表达式反向搜索 C-M-r 选择上一个搜索结果 M-p 选择下一个搜索结果 M-n 退出搜索并停留在当前搜索到的位置 RET 中止当前搜索 C-g
移动
移动的单位 向后 向前 字符 C-b C-f 单词 M-b M-f 行 C-p C-n 当前行开头或结尾 C-a C-e 句 M-a M-e 段 M-{ M-} 页 C-x [ C-x ] 表达式 C-M-b C-M-f 函数 C-M-a C-M-e 缓冲区开头或结尾 M-< M-> 垂直滚动屏幕 C-v M-v 水平滚动屏幕 C-x < C-x > 滚动当前行到屏幕中央 C-u C-l 指定行移动 M-g M-g
删除
删除的单位 |
向后 |
向前 |
字符 |
DEL |
C-d |
单词 |
M-DEL |
M-d |
行 |
M-0 C-k |
C-k |
句 |
C-x DEL |
M-k |
表达式 |
M-- C-M-k |
C-M-k |
删除当前行 |
C-S-DEL |
|
删除区域 |
C-w |
|
复制区域到删除环 |
M-w |
|
删除到字符 |
M-z char |
|
从删除环中拉回内容 |
C-y |
|
从删除环中拉回更早期的内容 |
M-y |
|
注:这里的DEL在你的键盘上可能是Backspace
标记
设置标记 C-@ 在当前光标位置和标记处跳转 C-x C-x 设置单词标记 M-@ 标记段 M-h 标记页 C-x C-p 标记表达式 C-M-@ 标记函数 C-M-h 标记整个缓冲区 C-x h
查询替换
交互替换 M-% 使用正则表达式 M-x
query-replace-regexp 在查询替换模式下: 替换当前项并跳转到下一项 SPC 替换当前项不跳转 , 不替换当前项并跳转到下一项 DEL 替换全部剩下的查询结果 ! 回到上一个匹配结果 ^ 退出查询替换 RET 进入递归编辑(C-M-c退出) C-r
多窗格
首先解释一下,Emacs里一个框(Frame)是值窗口系统中的一个窗口,一个窗格(Window)则是指显示在一个Frame
命令描述 窗格 框 删除所有其他窗格 C-x 1 垂直分割 C-x 2 C-x 5 2 删除当前窗格 C-x 0 C-x 5 0 水平分割 C-x 3 滚动其他窗格 C-M-v 切换到另一个窗格 C-x o C-x 5 o 在其他窗格切换缓冲区 C-x 4 b C-x 5 b 在其他窗格显示缓冲区 C-x 4 C-o C-x 5 C-o 在其他窗格打开文件 C-x 4 f C-x 5 f 在其他窗格以只读方式打开文件 C-x 4 r C-x 5 r 在其他窗格打开目录 C-x 4 d C-x 5 d 在其他窗格查找标签 C-x 4 . C-x 5 . 窗格高度增加 C-x ^ 窗格宽度减少 C-x { 窗格宽度增加 C-x }
格式化
缩进当前行 TAB 缩进区域 C-M-/ 缩进表达式 C-M-q 增加缩进 C-x TAB 在当前位置后增加新行 C-o 当前位置到行尾的内容下移 C-M-o 删除当前位置附近的空行 C-x C-o 将当前行连接到上一行 M-^ 删除光标附近的空白 M-/
大小写转换
单词转换为大写 M-u 单词转换为小写 M-l 单词转换为首字母大写 M-c 区域转换为大写 C-x C-u 区域转换为小写 C-x C-l
微型缓冲区
尽可能多地补全 |
TAB |
补全至多一个单词 |
SPC |
补全并执行 |
RET |
显示可能的补全项 |
? |
切换到上一个输入 |
M-p |
切换到下一个输入 |
M-p |
用正则表达式往后搜索历史记录 |
M-r |
用正则表达式往前搜索历史记录 |
M-s |
终止命令 |
C-g |
缓冲区
选择另一个缓冲区 C-x b 列出所有缓冲区 C-x C-b 关闭一个缓冲区 C-x k
缓冲区
交换字符 C-t 交换单词 M-t 交换行 C-x C-t 交换表达式 C-M-t
交换
交换字符 C-t 交换单词 M-t 交换行 C-x C-t 交换表达式 C-M-t
拼写检查
见车当前单词拼写 M-$ 检查区域内所有单词 M-x
ispell-region 检查整个缓冲区 M-x
ispell-buffer
标签
查找标签 M-. 查找下一个标签 C-u M-. 指定一个新标签 M-x
visit-tags-table 在标签表内的所有文件用正则表达式搜索 M-x
tags-search 在所有文件内运行查询替换 M-x
tags-query-replace 继续最后一个标签搜索或查询替换 M-,
Shells
执行一个外部命令 M-! 在当前区域运行一shell命令 M-| 使用一个外部命令处理当前区域 C-u M-| 启动一个shell M-x shell
矩形区域
复制矩形区域到寄存器 C-x r r 删除矩形区域 C-x r k 拉回矩形区域内容 C-x r y 插入一个矩形区域 C-x r o 清空矩形区域 C-x r c 矩形区域内每行内容替换为字符串 C-x r t
缩写
增加全局缩写 |
C-x a g |
增加模式缩写 |
C-x a l |
给这个缩写增加全局扩展 |
C-x a i g |
给这个缩写增加模式扩展 |
C-x a i l |
扩展缩写 |
C-x a e |
动态扩展上一个单词 |
M-/ |
正则表达式
匹配换行符之外的任何字符 . 任意次重复 * 一次或一次以上重复 + 一次或一次也没有 ? 转义字符 /c 分支 /| 分组 /(.../) 第n组 /n 单词开始或结束 /b 非单词开始或结束 /B 单位 开始 结束 行 ^ $ 词 /< /> 缓冲区 /' /' 字符类别 匹配 不匹配 字符集合 [ ... ] [^ ... ] 单词 /w /W
国际化字符集
指定语言 |
M-x set-language-environment |
显示所有输入法 |
M-x list-input-methods |
开启或禁用输入法 |
C-/ |
设置命令编码系统 |
C-x RET c |
显示所有编码系统 |
M-x list-coding-systems |
选择编码系统 |
M-x prefer-coding-system |
信息
进入信息文档阅读器 |
C-h i |
在信息文档中查找指定的函数或变量 |
C-h C-i |
在节点中移动 |
|
往前滚动 |
SPC |
反向滚动 |
DEL |
节点开始处 |
. |
节点间移动 |
|
下一个节点 |
n |
上一个节点 |
p |
上一层 |
u |
通过名字选择菜单项 |
m |
选择第n个菜单项 |
n |
填转到节点 |
f |
返回上一次所在的节点 |
l |
返回到目录节点 |
d |
通过名字跳转到任意节点 |
g |
其他: |
|
进入快速指南 |
h |
退出信息文档 |
q |
用正则表达式搜索节点 |
M-s |
寄存器
保存区域到寄存器 C-x r s 插入寄存器内容到缓冲区 C-x r i 保存当前位置到寄存器 C-x r SPC 跳转到保存在寄存器中的位置 C-x r j
键盘宏
开始记录键盘宏 |
C-x ( |
结束记录键盘宏 |
C-x ) |
执行最后一个宏 |
C-x e |
追加内容到最后一个键盘宏 |
C-u C-x |
给最后一个键盘宏命名 |
M-x name-last-kbd-macro |
插入键盘宏的Lisp定义到当前缓冲区 |
M-x insert-kbd-macro |