博客地址:http://blog.csdn.net/shuxiao9058
原始作者:季亚
第一章 Emacs的基本概念
表1-1:Emacs编辑器的主模式
模式 | 功能 |
基本模式(fundamental mode) | 默认模式,无特殊行为 |
文本模式(text mode) | 书写文字材料(第二章) |
邮件模式(mail mode) | 书写电子邮件消息(第六章) |
RMAIL模式(RMAIL mode) | 阅读和组织电子邮件(第六章) |
只读模式(view mode) | 查看文件,但不进行编辑(第五章) |
shell模式(shell mode) | 在Emacs里运行一个UNIX shell(第五章) |
FTP模式(ange-ftp mode) | 下载或者查看远程系统上的文件(第七章) |
Telent模式(telnet mode) | 登录到远程系统(第七章) |
大纲模式(outline mode) | 书写大纲(第八章) |
缩进文本模式(indented text mode) | 自动缩进文本(第八章) |
图形模式(picture mode) | 绘制简单的线条图形(第八章) |
mroff模式(mroff mode) | 按mroff的要求对文件进行排版(第九章) |
TEX模式(TEX mode) | 按TEX的要求对文件进行排版(第九章) |
C模式(C mode) | 书写C语言程序(第十二章) |
C++模式(C++ mode) | 书写C++程序(第十二章) |
FORTRAN模式(FORTRAN mode) | 书写FORTRAN程序(第十二章) |
Emacs LISP模式(Emacs LISP mode) | 书写Emacs LISP函数(第十二章) |
LISP模式(LISP mode) | 书写LISP程序(第十二章) |
LISP互动模式(LISP interaction mode) | 书写和求值LISP表达式(第十二章) |
表1-2:Emacs编辑器的副模式
模式 | 功能 |
自动换行模式(auto-fill mode) | 开启字换行(word wrap)功能(第二章) |
改写模式(overwrite mode) | 打字时替换而不是插入字符(第二章) |
自动保存模式(auto-save mode) | 把文件按一定周期自动保存到一个特殊的临时文件里(第二章) |
行号模式(line number mode) | 在状态栏上显示当前文件行的编号(第二章) |
临时标记模式(transient mark mode) | 对被选取的文本区做高亮反显(第二章) |
缩略语词模式(abbrev mode) | 允许使用单词的简写形式(第三章) |
大纲模式(outline mode) | 书写大纲(第八章) |
VC模式(VC mode) | 在Emacs下使用各种版本控制系统(第十五章) |
表1-3:与文件操作有头的命令
键盘操作 | 命令名称 | 动作 |
C-x C-f | find-file | 查找文件并在一个新缓冲区里打开它 |
C-x C-v | find-alternate-file | 读入另外一个文件替换掉用“C-x C-f”读入的文件 |
C-xi | insert-file | 把文件插入到光标的当前位置 |
C-x C-s | save-buffer | 保存文件 |
C-x C-w | write-file | 把缓冲区内容写入一个文件 |
C-x C-c | save-buffers-kill-emacs | 退出Emacs |
C-h | help-command | 进入Emacs的在线帮助系统 |
C-h f | describe-function | 给出某个给定命令名的在线帮助信息 |
C-h k | describe-key | 给出某个给定击键序列的在线帮助信息 |
C-ht | help-with-tutorial | 启动Emacs教程 |
C-hi | info-goto-emacs-command-node | 启动Info文档阅读器 |
第二章 文件编辑
ESC x auto-fill-mode RETURN 切换自动换行模式
ESC x this-outrageously-long-string RETURN开启Emacs自动完成功能,即输入几个字符后按下TAB键,Emacs通常会自动填上单词的其余部分或者命令的其余部分
表 2-1:光标移动命令速查表
键盘操作 | 命令名称 | 动作 |
C-f | forward-char | 光标前移一个字符(右) |
C-b | backward-char | 光标后移一个字符(左) |
C-p | previous-line | 光标前移一行(上) |
C-n | next-line | 光标后移一行(下) |
M-f | forward-word | 光标前移一个单词 |
M-b | backward-word | 光标后移一个单词 |
C-a | beginning-of-line | 光标移到行首 |
C-e | end-of-line | 光标移到行尾 |
M-e | forward-sentence | 光标前移一个句子 |
M-a | backward-sentence | 光标后移一个句子 |
M-} | forward-paragraph | 光标前移一个段落 |
M-{ | backward-paragraph | 光标后移一个段落 |
C-v | scroll-up | 屏幕上卷一屏 |
M-v | scroll-down | 屏幕下卷一屏 |
C-x ] | forward-page | 光标前移一页 |
C-x [ | backward-page | 光标后移一页 |
M-< | beginning-of-buffer | 光标前移到文件头 |
M-> | end-of-buffer | 光标前移到文件尾 |
(无) | goto-line | 光标前进到文件的第n行 |
(无) | goto-char | 光标前进到文件的第n个字符 |
C-l | recenter | 重新绘制屏显画面,当前行放在画面中心处 |
M-n | digit-argument | 重复执行n次后续命令 |
C-u n | universal-argument | 重复执行n次后续命令(省略n时重复4次) |
说明:
1. 以“CTRL”开头的命令的光标移动距离通常都要比对应的以“ESC”开头的命令移动距离短。
2. 表中第一栏的“(无)”表示如果想执行这个命令,就必须按下“ESC x”(或者“M-x”),再输入命令的全名,最后按下回车键。它们没有对应的默认组合键。
表 2-2:文本删除命令速查表
键盘操作 | 命令名称 | 动作 |
C-d | delete-char | 删除光标位置上的字符 |
Del | delete-backward-char | 删除光标前面的字符 |
M-d | kill-word | 删除光标后面的单词 |
M-Del | backward-kill-word | 删除光标前面的单词 |
C-k | kill-line | 从光标位置删除到行尾 |
M-k | kill-sentence | 删除光标后面的句子 |
C-x Del | backward-kill-sentence | 删除光标前面的句子 |
C-y或SHIFT-INSERT | yank | 恢复被删除的文本 |
C-w或SHIFT-DELETE | kill-region | 删除文本块 |
(无) | kill-paragraph | 删除光标后面的段落 |
(无) | backward-kill-paragraph | 删除光标前面的段落 |
表2-3:文本块操作命令速查表
键盘操作 | 命令名称 | 动作 |
C-@或 C- Space | set-mark-command | 标记文本块的开始(或结束)位置 |
C-xC-x | exchange-point-and-mark | 互换插入点和文本标记的位置 |
C-w或SHIFT-DELETE | kill-region | 删除文本块 |
C-y或SHIFT-INSERT | yank | 粘贴最近删除或复制的文本 |
M-w | kill-ring-save | 复制文本块(以便用“C-y”命令来粘贴它) |
M-h | mark-paragraph | 标记段落 |
C-x C-p | mark-page | 标记页面 |
C-x h | mark-whole-buffer | 标记整个缓冲区 |
M-y | yank-pop | 在用过“C-y”命令以后粘贴更早删除的文本 |
表2-4:段落重排命令速查表
键盘操作 | 命令名称 | 动作 |
ESC q | fill-paragraph | 重排段落 |
(无) | fill-region | 对某个文件块中的段落进行重排 |
表2-5:位置交换命令速查表
键盘操作 | 命令名称 | 动作 |
C-t | transpose-chars | 交换两个字符的位置 |
M-t | transpose-words | 交换两个单词的位置 |
C-x C-t | transpose-lines | 交换两个文本行的位置 |
(无) | transpose-sentences | 交换两个单词的位置 |
(无) | transpose-paragraphs | 交换两个段落的位置 |
表2-6:字母大小写编辑命令速查表
键盘操作 | 命令名称 | 动作 |
M-c | capitalize-word | 把单词的首字母改为大写 |
M-u | upcase-word | 把单词的字母全部改为大写 |
M-l | downcase-word | 把单词的字母全部改为小写 |
Meta - M-c | negative-argument; capitalize-word | 把前一个单词的首字母改为大家 |
Meta - M-u | negative-argument;upcase-word | 把前一个单词的字母全部改为大写 |
Meta - M-l | negative-argument;downcase-word | 把前一个单词的字母全部改为小写 |
表2-7:撤销编辑修改的3种方法
如果你: | 请使用以下命令 |
不喜欢刚做的修改,想一个一个地撤销它们 | C-_ or C-x u (undo) |
想撤销自上次对文件存盘之后的所有修改 | M-x revert-buffer Enter |
想回到该文件以前的版本(即这个文件在开始这次编辑工作之前的样子) | C-x C-f filename~ Enter |
表2-8:命令的中止和撤销
键盘操作 | 命令名称 | 动作 |
C-g | keyboard-quit | 放弃当前命令 |
C-x u | advertised-undo[a] | 撤销上一次编辑(可以重复使用) |
C-_或C-/ | undo | 撤销上一次编辑 |
(无) | revert-buffer | 把缓冲区恢复到上次对文件进行存盘(或者自动存盘)时的状态 |
[a]advertised-undo和undo之间并没有真正的不同。它们的工作情况都是一样的。
第三章 查找和替换操作
表3-1:递增查找命令速查表
键盘操作 | 命令名称 | 动作 |
C-s | isearch-forward | 向前(朝文件尾方向)开始递增查找操作;后面是查找字符串。另外,(向前)查找下一个出现查找字符串的地方 |
C-s | isearch-backward | 向后(朝文件头方向)开始递增查找操作;后面是查找字符串。另外,(向后)查找下一个出现查找字符串的地方 |
Enter | isearch-exit | 退出查找操作 |
C-g | keyboard-quit | 取消递增查找操作(你可能需要连按它两次) |
Del | isearch-delete-char | 删除查找字符串中的字符 |
C-s C-w | isearch-yank-word | 开始递增查找操作;把光标位置处的单词用做查找字符串 |
C-s C-y | isearch-yank-line | 开始递增查找操作;把光标位置到行尾之间的文本用做查找字符串 |
C-s M-y | isearch-yank-kill | 开始递增查找操作;把删除环中的文本用做查找字符串 |
C-sC-s | isearch-repeat-forward | 重复刚才的向前查找操作 |
C-rC-r | isearch-repeat-backward | 重复刚才的向后查找操作 |
表3-2:简单查找命令速查表
键盘操作 | 操作 |
C-s Entersearchstring Enter | 向前(朝文件尾方向)开始一次非递增查找操作 |
C-s | 向前查找下一个 |
C-r Entersearchstring Enter | 向前(朝文件头方向)开始一次非递增查找操作 |
C-r | 向后查找下一个 |
表3-3:查询-替换操作中的响应
键盘操作 | 操作 |
M-% | 开始查询-替换操作 |
Space或y | 用新字符串替换查询字符串searchstring,然后前进到下一个位置 |
Del或n | 不替换;前进到一个位置 |
. | 在当前位置做替换后退出查询-操作 |
, | 替换并显示替换情况(再按空格键或“y”后才移动到下一个位置) |
! | 对后面的文件内容全部进行替换,不再提问是否要进行替换 |
^ | 返回上一次进行了替换的位置 |
Enter或q | 退出查询-替换操作 |
E | 编辑替换字符串 |
C-r | 进入递归编辑状态 |
C-w | 删除此处内容并进入递归编辑状态(好做其他修改) |
C-M-c | 退出递归编辑状态,继续完成查询-替换操作 |
C-] | 退出递归编辑状态和查询-替换操作 |
表3-4:用来建立正则表达式的字符
字符 | 匹配情况 |
^ | 匹配行首 |
$ | 匹配行尾 |
. | 匹配任意单个字符(类似于文件名中的问号“?”) |
.* | 匹配任意(零或以上)个字符(这是一个真正的通配符,类似于文件名中的星号“*”) |
\< | 匹配单词的开头 |
\> | 匹配单词的结尾 |
[ ] | 匹配方括号中的任何一个字符;比如“[a-z]”将匹配任意一个字母表字符 |
\s, \S | 匹配任何空白字符:空格、换行、TAB、回车、换页、退格;\S匹配任何除空白字符外的所有字符 |
\d, \D | 匹配任何单个数字:0-9;\D匹配任何除数字外的所有字符 |
\w, \W | 匹配任何字(大小写字母、数字和下划线);\W匹配任何除上述外的所有字符 |
表3-5:正规表达式查找命令速查表
键盘操作 | 命令名称 | 动作 |
C-M-s Enter | re-search-forward | 向前(朝文件尾方向)查找一个正则表达式 |
C-M-r Enter | re-search-backward | 向后(朝文件头方向)查找一个正则表达式 |
C-M-s Enter | isearch-forward-regexp | 向前(朝文件尾方向)递增查找一个正则表达式 |
C-M-r Enter | isearch-backward-regexp | 向后(朝文件头方向)递增查找一个正则表达式 |
C-M-% Enter | query-replace-regexp | 查询-替换一个与正则表达式 |
(无) | replace-regexp | 无条件地对一个正则表达式做全局性替换(谨慎使用) |
表3-6:Ispell命令速查表
键盘操作 | 命令名称 | 动作 |
M-$ Enter | ispell-word | 检查光标位置上的单词或者光标后面的单词 |
(无) | ispell-region | 检查文本块里的单词 |
(无) | ispell-buffer | 检查缓冲区里的单词 |
(无) | ispell-message | 检查电子邮件正文里的单词 |
(无) | ispell-comments-and-strings | 检查程序里的注释和字符串 |
C-u M-$ | ispell-continue | 让Ispell重新开始继续执行;这个命令只有在运行过Ispell并用“C-g”组合键暂停过它的执行时才有效 |
(无) | ispell-kill-ispell | 杀死(即结束)Ispell进程 |
M-Tab | ispell-complete-word | 在文本模式下,自动补足当前单词 |
(无) | flyspell-mode | 进入Flyspell副模式,该模式下会突出显示错误拼写单词。 |
(无) | flyspell-buffer | 拼写检查当前缓冲区,突显出所有拼错的单词。使用鼠标中键来纠正。 |
表3-7:UNIX拼写检查命令速查表
键盘操作 | 命令名称 | 动作 |
(无) | spell-word | 检查光标位置上的单词或者光标后面的单词 |
(无) | spell-buffer | 检查当前编辑缓冲区的拼写 |
(无) | spell-region | 检查当前文本块的拼写 |
表3-8:单词简写情况示例
简写词 | 短语定义 | 输入 | 扩展为 | 说明 |
lc | lamb chop | lc | lamb chop | “lc”是小写,所以“lamp chop”是小写 |
lc | lamb chop | Lc | Lamb chop | “Lc”里面有一个大写字母,所以“Lamb”的首字母大写 |
lc | lamb chop | lC | Lamb chop | “Lc”里面有一个大写字母,所以“Lamb”的首字母大写 |
lc | lamb chop | LC | Lamb Chop | “LC”全都是大写,所以两个单词的首字母都大写 |
lc | Lamb Chop | lc | Lamb Chop | 短语定义里的字母大小写情况永远不变 |
lc | Lamb Chop | LC | Lamb Chop | 短语定义里的字母大小写情况永远不变 |
表3-9:简写词编辑命令速查表
键盘操作 | 命令名称 | 动作 |
M-/ | dabbrev-expand | 根据最相近的单词将单词补全,该单词始于这个字符串(如果没有你要找的单词,再次按M-/) |
(无) | abbrev-mode | 进入(或退出)单词简写模式 |
C-x a –或C-x aig | inverse-add-global-abbrev | 输入全局性简写词之后,输入其短语定义 |
C-x ai l | inverse-add-mode-abbrev | 输入局部性简写词之后,输入其短语定义 |
(无) | unexpand-abbrev | 撤销最近一个简写词定义条目 |
(无) | write-abbrev-file | 保存简写词汇表文件 |
(无) | edit-abbrevs | 编辑简写词汇表 |
(无) | list-abbrevs | 查看简写词汇表 |
(无) | kill-all-abbrevs | 本次编辑工作禁用简写词功能 |
第四章 缓冲区和窗口
表4-1:窗口命令速查表
键盘操作 | 命令名称 | 动作 |
C-x 2 | split-window-vertically | 把当前窗口分割为上、下排列的两个窗口 |
C-x 3 | split-window-horizontally | 把当前窗口分割为左、右排列的两个窗口 |
C-x > | scroll-right | 窗口内容右卷 |
C-x < | scroll-left | 窗口内容左卷 |
C-x o | other-window | 移动到其他窗口;如果有多个窗口,按顺时针方向移动到下一个窗口 |
C-x 0 | delete-window | 删除当前窗口 |
C-x 1 | delete-other-windows | 删除所有窗口,只保留当前窗口 |
(无) | delete-windows-on | 删除某个给定编辑缓冲区上的所有窗口 |
C-x ^ | enlarge-window | 加高当前窗口 |
(无) | shrink-window | 压低当前窗口 |
C-x } | enlarge-window-horizontally | 加宽当前窗口 |
C-x { | shrink-window-horizontally | 压窄当前窗口 |
C-x - | shrink-window-if-larger-than-buffer | 如果编辑缓冲区比窗口小,就压缩窗口面积 |
C-x + | balance-windows | 把所有窗口调整为同样大小 |
C-M-v | scroll-other-window | 对其他窗口做卷屏操作 |
C-x 4 f | find-file-other-window | 在其他窗口里查找并打开一个文件 |
C-x 4 b | switch-to-buffer-other-window | 在其他缓冲区里选择一个编辑缓冲区 |
(无) | compare-windows | 对两个编辑缓冲区的内容进行比较,并显示它们之间的第一个不同之处 |
表4-2:编辑缓冲区操作命令速查表
键盘操作 | 命令名称 | 动作 |
C-x b | switch-to-buffer | 移动到指定的编辑缓冲区 |
C-x | next-buffer | 移动到编辑缓冲区清单里的下一个编辑缓冲区 |
C-x | previous-buffer | 移动到编辑缓冲区清单里的上一个编辑缓冲区 |
C-x C-b | list-buffers | 显示编辑缓冲区清单 |
C-x k | kill-buffer | 删除指定的编辑缓冲区 |
(无) | kill-some-buffers | 以问答方式删除各个编辑缓冲区 |
(无) | rename-buffer | 把编辑缓冲区的名字改为指定的名字 |
C-x s | save-some-buffers | 以问答方式存盘各个修改过的编辑缓冲区 |
表4-3:编辑缓冲区清单操作命令速查表
键盘操作 | 动作 | 执行情况 |
C-n, Space, n, or | 移动到清单里的下一个编辑缓冲区(即编辑缓冲区清单里的下一行) | 立即执行 |
C-p, p, or | 移动到清单里的下一个编辑缓冲区(即编辑缓冲区清单里的上一行) | 立即执行 |
d | 给编辑缓冲区加上待删除标记 | 按下“x”键时执行 |
k | 给编辑缓冲区加上待删除标记 | 按下“x”键时执行 |
s | 给编辑缓冲区加上待存盘标记 | 按下“x”键时执行 |
u | 去掉编辑缓冲区上的操作标记 | 立即执行 |
x | 对加有操作标记的所有编辑缓冲区执行相应的操作 | 立即执行 |
Del | 去掉上一个编辑缓冲区上的修改标记 | 立即执行 |
~ | 给编辑缓冲区加上未修改标记 | 立即执行 |
% | 转换编辑缓冲区加上未修改标记 | 立即执行 |
1 | 把编辑缓冲区满屏显示 | 立即执行 |
2 | 把这个编辑缓冲区和下一个编辑缓冲区显示到两个水平窗口里 | 立即执行 |
f | 在原本显示编辑缓冲区清单的窗口里显示此编辑缓冲区的内容 | 立即执行 |
o | 把此编辑缓冲区显示到另外一个窗口里 | 立即执行 |
m | 给编辑缓冲区加上待显示标志。参见“v”命令的说明 | 按下“v”键时执行 |
v | 显示用“m”命令加上待显示标志的编辑缓冲区。Emacs将动态地创建足够的窗口来显示加有这类标志的编辑缓冲区 | 立即执行 |
q | 退出编辑缓冲区清单 | 立即执行 |
表4-4:书签清单编辑命令速查表
命令 | 动作 |
Enter, f,或j | 在当前行转到书签 |
C-o或o | 打开当前行的书签到另一个窗口;按o键将光标切换到该窗口;C-o让光标停留在当前窗口。 |
d, C-d, or k | 对书签重新命名 |
r | 对书签重新命名 |
s | 保存清单里的全部书签 |
m | 给书签加上待显示标记 |
v | 显示加有待显示标记的书签。如果没有加上待显示标记的,就显示光标所在处的书签 |
t | 切换书签关联文件的路径的显示/不显示状态 |
w | 显示书签关联文件的存放位置(即路径名) |
x | 删除加有待删除标记的书签 |
u | 去掉书签上的待操作标记 |
Del | 去掉上一行书签上的待操作标记 |
q | 退出书签清单 |
Space or n | 移到下一行 |
p | 移到上一行 |
l | 加载一个书签文件(除了默认的). |
A | 显示所有注释 |
a | 显示当前书签注释 |
e | 编辑(或新建)为当前书签注释 |
表4-5:书签清单编辑命令速查表
键盘操作 | 命令名称 | 动作 |
C-x r m | bookmark-set | 在当前光标位置处设置一个书签 |
C-x r b | bookmark-jump | 跳转到书签指示位置 |
(无) | bookmark-rename | 重新命名一个书签 |
(无) | bookmark-delete | 删除一个书签 |
(无) | bookmark-save | 把书签全都保存到默认的书签 |
C-x r l | bookmark-menu-list | 进入“*Bookmark List*”编辑缓冲区 |
(无) | bookmark-insert | 插入与给定书签关联着的文件的完整内容 |
(无) | bookmark-write | 把书签全都保存到一个指定的文件里 |
(无) | bookmark-load | 从指定文件里加载书签 |
(无) | bookmark-insert-location | 插入路径到给定的书签在当前的光标位置 |
表4-6:窗格命令速查表
键盘操作 | 命令名称 | 动作 |
C-x 5 o | other-frame | 移动到其他窗格 |
C-x 5 0 | delete-frame | 删除当前窗格 |
C-x 5 2 | make-frame | 在当前编辑缓冲区上创建一个新窗格 |
C-x 5 f | find-file-other-frame | 在一个新空格里查找文件 |
C-x 5 r | find-file-read-only-other-frame | 创建新窗格并查找文件,把编辑缓冲区设置为只读的(用来查阅你不小心修改了的文件) |
C-x 5 b | switch-to-buffer-other-frame | 创建新窗格并在其中显示另外一个编辑缓冲区 |
备注:本文大部分内容摘自学习GNU Emacs(第二版),文中紫色部分摘自Learning GNU Emacs, 3rd Edition,并由本人翻译整理而得。