emacs 快捷键
基本快捷键(Basic)
C-x C-f "find"文件, 即在缓冲区打开/新建一个文件
C-x C-s 保存文件
C-x C-w 使用其他文件名另存为文件
C-x C-v 关闭当前缓冲区文件并打开新文件
C-x i 在当前光标处插入文件
C-x b 新建/切换缓冲区
C-x C-b 显示缓冲区列表
C-x k 关闭当前缓冲区
C-z 挂起emacs
C-x C-c 关闭emacs
光标移动基本快捷键(Basic Movement)
C-f 后一个字符
C-b 前一个字符
C-p 上一行
C-n 下一行
M-f 后一个单词
M-b 前一个单词
C-a 行首
C-e 行尾
C-v 向下翻一页
M-v 向上翻一页
M-< 到文件开头
M-> 到文件末尾
编辑(Editint)
M-n 重复执行后一个命令n次
C-u 重复执行后一个命令4次
C-u n 重复执行后一个命令n次
C-d 删除(delete)后一个字符
M-d 删除后一个单词
Del 删除前一个字符
M-Del 删除前一个单词
C-k 移除(kill)一行
C-Space 设置开始标记 (例如标记区域)
C-@ 功能同上, 用于C-Space被操作系统拦截的情况
C-w 移除(kill)标记区域的内容
M-w 复制标记区域的内容
C-y 召回(yank)复制/移除的区域/行
M-y 召回更早的内容 (在kill缓冲区内循环)
C-x C-x 交换光标和标记
C-t 交换两个字符的位置
M-t 交换两个单词的位置
C-x C-t 交换两行的位置
M-u 使从光标位置到单词结尾处的字母变成大写
M-l 与M-u相反
M-c 使从光标位置开始的单词的首字母变为大写
重要快捷键(Important)
C-g 停止当前运行/输入的命令
C-x u 撤销前一个命令
M-x revert-buffer RETURN (照着这个输入)撤销上次存盘后所有改动
M-x recover-file RETURN 从自动存盘文件恢复
M-x recover-session RETURN 如果你编辑了几个文件, 用这个恢复
在线帮助(Online-Help)
C-h c 显示快捷键绑定的命令
C-h k 显示快捷键绑定的命令和它的作用
C-h l 显示最后100个键入的内容
C-h w 显示命令被绑定到哪些快捷键上
C-h f 显示函数的功能
C-h v 显示变量的含义和值
C-h b 显示当前缓冲区所有可用的快捷键
C-h t 打开emacs教程
C-h i 打开info阅读器
C-h C-f 显示emacs FAQ
C-h p 显示本机Elisp包的信息
搜索/替换(Seach/Replace)
C-s 向后搜索
C-r 向前搜索
C-g 回到搜索开始前的位置(如果你仍然在搜索模式中)
M-% 询问并替换(query replace)
Space或y 替换当前匹配
Del或n 不要替换当前匹配
. 仅仅替换当前匹配并退出(替换)
, 替换并暂停(按Space或y继续)
! 替换以下所有匹配
^ 回到上一个匹配位置
RETURN或q 退出替换
使用正则表达式(Regular expression)搜索/替换
可在正则表达式中使用的符号:
^ 行首
$ 行尾
. 单个字符
.* 任意多个(包括没有)字符
\< 单词开头
\> 单词结尾
[] 括号中的任意一个字符(例如[a-z]表示所有的小写字母)
M C-s RETURN 使用正则表达式向后搜索
M C-r RETURN 使用正则表达式向前搜索
C-s 增量搜索
C-s 重复增量搜索
C-r 向前增量搜索
C-r 重复向前增量搜索
M-x query-replace-regexp 使用正则表达式搜索并替换
窗口命令(Window Commands)
C-x 2 水平分割窗格
C-x 3 垂直分割窗格
C-x o 切换至其他窗格
C-x 0 关闭窗格
C-x 1 关闭除了光标所在窗格外所有窗格
C-x ^ 扩大窗格
M-x shrink-window 缩小窗格
M C-v 滚动其他窗格内容
C-x 4 f 在其他窗格中打开文件
C-x 4 0 关闭当前缓冲区和窗格
C-x 5 2 新建窗口(frame)
C-x 5 f 在新窗口中打开文件
C-x 5 o 切换至其他窗口
C-x 5 0 关闭当前窗口
书签命令(Bookmark commands)
C-x r m 在光标当前位置创建书签
C-x r b 转到书签
M-x bookmark-rename 重命名书签
M-x bookmark-delete 删除书签
M-x bookmark-save 保存书签
C-x r l 列出书签清单
d 标记等待删除
Del 取消删除标记
x 删除被标记的书签
r 重命名
s 保存列表内所有书签
f 转到当前书签指向的位置
m 标记在多窗口中打开
v 显示被标记的书签(或者光标当前位置的书签)
t 切换是否显示路径列表
w 显示当前文件路径
q 退出书签列表
M-x bookmark-write 将所有书签导出至指定文件
M-x bookmark-load 从指定文件导入书签
Shell
M-x shell 打开shell模式
C-c C-c 类似unix里的C-c(停止正在运行的程序)
C-d 删除光标后一个字符
C-c C-d 发送EOF
C-c C-z 挂起程序(unix下的C-z)
M-p 显示前一条命令
M-n 显示后一条命令
DIRectory EDitor (dired)
C-x d 打开dired
C(大写C) 复制
d 标记等待删除
D 立即删除
e或f 打开文件或目录
g 刷新当前目录
G 改变文件所属组(chgrp)
k 从屏幕上的列表里删除一行(不是真的删除)
m 用*标记
n 光标移动到下一行
o 在另一个窗格打开文件并移动光标
C-o 在另一个窗格打开文件但不移动光标
P 打印文件
q 退出dired
Q 在标记的文件中替换
R 重命名文件
u 移除标记
v 显示文件内容
x 删除有D标记的文件
Z 压缩/解压缩文件
M-Del 移除标记(默认为所有类型的标记)
~ 标记备份文件(文件名有~的文件)等待删除
# 标记自动保存文件(文件名形如#name#)等待删除
*/ 用*标记所有文件夹(用C-u */n移除标记)
= 将当前文件和标记文件(使用C-@标记而不是dired的m标记)比较
M-= 将当前文件和它的备份比较
! 对当前文件应用shell命令
M-} 移动光标至下一个用*或D标记的文件
M-{ 移动光标至上一个用*或D标记的文件
% d 使用正则表达式标记文件等待删除
% m 使用正则表达式标记文件为*
+ 新建文件夹
> 移动光标至后一个文件夹
< 移动光标至前一个文件夹
s 切换排序模式(按文件名/日期)
或许把这个命令归入这一类也很合适:
M-x speedbar 打开一个独立的目录显示窗口
Telnet
M-x telnet 打开telnet模式
C-d 删除后一个字符或发送EOF
C-c C-c 停止正在运行的程序(和unix下的C-c类似)
C-c C-d 发送EOF
C-c C-o 清除最后一个命令的输出
C-c C-z 挂起正在运行的命令
C-c C-u 移除前一行
M-p 显示前一条命令
Text
只能在text模式里使用
M-s 使当前行居中
M-S 使当前段落居中
M-x center-region 使被选中的区域居中
宏命令(Macro-commands)
C-x ( 开始定义宏
C-x ) 结束定义宏
C-x e 运行最近定义的宏
M-n C-x e 运行最近定义的宏n次
M-x name-last-kbd-macro 给最近定义的宏命名(用来保存)
M-x insert-kbd-macro 将已命名的宏保存到文件
M-x load-file 载入宏
编程(Programming)
M C-\ 自动缩进光标和标记间的区域
M-m 移动光标到行首第一个(非空格)字符
M-^ 将当前行接到上一行末尾处
M-; 添加缩进并格式化的注释
C, C++和Java模式
M-a 移动光标到声明的开始处
M-e 移动光标到声明的结尾处
M C-a 移动光标到函数的开始处
M C-e 移动光标到函数的结尾处
C-c RETURN 将光标移动到函数的开始处并标记到结尾处
C-c C-q 根据缩进风格缩进整个函数
C-c C-a 切换自动换行功能
C-c C-d 一次性删除光标后的一串空格(greedy delete)
为了实现下面的一些技术, 你需要在保存源代码的目录里运行"etags
*.c *.h *.cpp"(或者源代码的其他的扩展名)
M-.(点) 搜索标签
M-x tags-search ENTER 在所有标签里搜索(使用正则表达式)
M-,(逗号) 在tags-search里跳至下一个匹配处
M-x tags-query-replace 在设置过标签的所有文件里替换文本
GDB(调试器)
M-x gdb 在另一个的窗格中打开gdb
版本控制(Version Control)
C-x v d 显示当前目录下所有注册过的文件(show all registered files in this dir)
C-x v = 比较不同版本间的差异(show diff between versions)
C-x v u 移除上次提交之后的更改(remove all changes since last checkin)
C-x v ~ 在不同窗格中显示某个版本(show certain version in different window)
C-x v l 打印日志(print log)
C-x v i 标记文件等待添加版本控制(mark file for version control add)
C-x v h 给文件添加版本控制文件头(insert version control header into file)
C-x v r 获取命名过的快照(check out named snapshot)
C-x v s 创建命名的快照(create named snapshot)
C-x v a 创建gnu风格的更改日志(create changelog file in gnu-style)
符号
C- 意思是按住 Ctrol 键- M- 意指 Meta 键 (键盘上若无Meta 键,则可以ALT ESC 键来取而代之)
- DEL 意指退格键 (不是 删除(Delete) key)
- RET 意指回车键
- SPC 意指空格键
- ESC 意指Escape键
- TAB 意指Tab键
- 像 "C-M-" (or "M-C") 这样连在一起的意味着同时按住 Control 和 Meta 键不放.
用方向键
C-p 、 C-b 、 C-f 和 C-n 这四个命令。它们的功能和方向键是一样的,如下图所示:
上一行 C-p (Prev line)
.
.
.
向左移 C-b .... 。.... 向右移 C-f (Forward character)
(Backward ) .
.
.
下一行 C-n (Next line)
“P N B F”四个字母分别代表了四个词,用这四个词记忆这些组合键会更容易:
P 代表 previous(上一行),
N 代表 next(下一行),
B 代表 backward(回
退),
F 则代表 forward(前进)
进入Emacs
要进入GNU Emacs,只需键入它的名字 emacs
离开Emacs
挂起Emacs: C-z
永久离开Emacs C-x C-c
文件
读取文件到Emacs C-x C-f
保存文件到磁盘 C-x C-s
保存所有文件 C-x s
插入其它文件的内容到当前缓冲 C-x i
用将要读取的文件替换当前文件 C-x C-v
将当前缓冲写入指定的文件 C-x C-w
Version control checkin/checkout C-x C-q
取得帮助
进入帮助系统很简单,只需要输入C-h(或F1)并跟随要获取帮助的对象,初次使用Emacs的用户可以输入C-h t进入使用手册
离开帮助窗口 C-x 1
滚动帮助窗口 C-M-v
匹配:显示与字符a串匹配的命令 C-h a
显示一个键的功能 C-h c
详细描述一个功能 C-h f
取得详细模式的信息 C-h m
错误恢复
取消当前要执行的命令 C-g
恢复系统崩溃后丢失的文件 M-x recover-file
撤销更新 C-x u或C-_
使缓冲回复到初始内容 M-x revert-buffer
Redraw garbaged scree n C-l
增量查找(Incremental Search)
向前查找 C-s
向后查找 C-r
规则表达式查找 C-M-s
反向规则表达式查找 C-M-r
选择前一个查找字符串 M-p
选择下一个查找字符串 M-n
退出增量查找 RET
取消上一个字符的作用 DEL(Backspace)
退出当前查找模式 C-g
在查找的过程中可重复使用C-s和C-r来改变查找方向
移动(Motion)
向前一个字符 C-f
向后一个字符 C-b
向前一个字 M-f
向后一个字 M-b
向上一行 C-p
向下一行 C-n
到行首 C-a
到行尾 C-e
到句首 M-a
到句尾 M-e
到段首 M-{
到段尾 M-}
到页首 C-x [
到页尾 C-x ]
到表达式首部 C-M-f
到表达式尾部 C-M-b
到函数首部 C-M-a
到函数尾部 C-M-e
到缓冲首部 M-<
到缓冲尾部 M->
滚动到下一屏 C-v
滚动到上一屏 M-v
滚动到右边一屏(内容向左移动) C-x <
滚动到左边一屏(内容向右移动) C-x >
滚动当前行到屏幕中央 C-u C-l
Killing和Deleting
向前delete字符 C-d
向后delete字符 DEL(Backspace)
向前delete到字首 M-d
向后delete到字尾 M-DEL(Backspace)
向前delete到行首 M-0 C-k
向后delete到行尾 C-k
向前delete到句首 C-x DEL(Backspace)
向后delete到句尾 M-k
向前delete到表达式首部 M-- C-M-k
向后delete到表达式尾部 C-M-k
Kill区域 C-w
拷贝区域到Kill Ring M-w
Kill到下一个给定字符出现的位置 M-z <char>
拉回(yank)上次kill的内容 C-y
用更早kill的内容取代拉回的上次kill的内容 M-y
标记(Marking)
标记当前位置 C-SPC或C-@
以字符为单位使用移动命令动态标记区域 C-x C-x
以字为单位使用移动命令动态标记区域 M-@
标记一段 M-h
标记一页 C-x C-p
标记一个表达式 C-M-@
标记一个函数 C-M-h
标记整个缓冲区 C-x h
Query Replace
交互式地替换一个文本串 M-%
交互式地替换一个规则表达式 M-x query-replace-regexp
替换当前的并移动到下一处 SPE
替换当前的但不移动到下一处 ,
不替换当前的并移动到下一处 L(Backspace)
替换所有剩下的符合条件的文本 !
退出替换模式 RET
进入递归的编辑模式 C-r
退出递归的编辑模式 C-M-c
多窗口(Multiple Windows)
(When two commands are shown,the second is for “other frame”)
删除所有其它窗口 C-x 1
上下分割当前窗口 C-x 2 C-x 5 2
左右分割当前窗口 C-x 3
删除当前窗口 C-x 0 C-x 5 0
滚动其它窗口 C-M-v
切换光标到另一个窗口 C-x 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
在另一窗口中运行dired命令 C-x 4 d C-x 5 d
在另一窗口中查找tag C-x 4 . C-x 5 .
增加窗口高度 C-x ^
减小窗口宽度 C-x {
增加窗口宽度 C-x }
格式(Formatting)
缩进当前行(与模式相关) TAB
缩进区域(与模式相关) C-M-
缩进表达式(与模式相关) C-M-q
Indent region rigidly arg. Columns C-x TAB
在光标后插入一个新的行 C-o
静态地将一行下移 C-M-o
删除光标附近的空行(留下一行) C-x C-o
与上一行合并成一行 M-^
删除光标附近的所有空格 M-
删除光标附近的空格(留下一格) M-SPC
Fill paragraph M-q
Set fill column C-x f
设置每一行开始的前缀 C-x .
设置字体 M-g
Case Change
将一个字设置为大写 M-u
将一个字设置为小写 M-l
将一个字首字母设置为大写 M-c
将一个区域设置为大写 C-x C-u
将一个区域设置为小写 C-x C-l
The Minibuffer
(the following keys are defined in the minibuffer)
最大程度地补全命令 TAB
补全命令中的一个字 SPC
完成并执行一个命令 RET
列出命令所有可能的后续部分 ?
列出在当前命令之前输入的命令 M-p
列出在当前命令之后输入的命令 M-n
用规则表达式在命令历史记录中向后搜寻 M-r
用规则表达式在命令历史记录中向前搜寻 M-s
重复执行上一条命令 C-x ESC ESC
缓冲(Buffer)
选择另一个缓冲 C-x b
列出所有的缓冲 C-x C-b
Kill一个缓冲 C-x k
置换(Transposing)
字符置换 C-t
字置换 M-t
行置换 C-x C-t
表达式置换 C-M-t
拼写检查(Spelling Check)
对当前的字进行拼写检查 M-$
检查区域内所有的字 M-x ispell-origin
检查缓冲内所有的字 M-x ispell-buffer
标记 (Tags)
查找标记 M-.
查找标记下一次出现的位置 C-u M-.
指定一个新的标记文件 M-x visit-tags-table
Regexp search on all files in tabs table M-x tags-search
在所有文件中执行查询-替换 M-x tags-query-replace
继续进行上一次标记查找或查询-替换 M-,
Shells
执行一个shell命令 M-!
在一个区域上执行sheel命令 M-|
通过shell命令过滤区域 C-u M-|
在窗口中启动一个shell M-x shell
矩形(Rectangles)
拷贝一个矩形到寄存器 C-x r r
Kill矩形 C-x r k
拉回矩形 C-x r y
打开一个矩形, 将文本移动至右边 C-x r o
清空矩形 C-x r c
为矩形中每一行加上一个字符串前缀 C-x r t
规则表达式(Regular Expressions)
除换行符外的所有单个字符 .
零个或多个重复 *
一个以上的重复 +
零个或一个重复 ?
转译字符
选择(or) |
分组 (…)
与第n个组相同的文本 n
At work break b
Not at work break B
寄存器(Register)
存储区域到寄存器 C-x r s
插入矩形内容到缓冲 C-x r i
存储光标位置到寄存器 C-x r SPC <num>
跳跃到寄存器中存储的光标位置 C-x r j <num>
键盘宏(Keyboard Macros)
开始定义一个键盘宏 C-x (
结束键盘宏的定义 C-x )
执行上一次定义的键盘宏 C-x e
追加到上一个键盘宏 C-u C-x (
为上一个键盘宏命名 M-x name-last-kbd-macro
在缓冲中插入Lisp M-x insert-kbd-macro
Tags
Tags 是一个显为人知的功能? 所以我想提一下. 这不是emacs发明的, 而是vi 原本的特异功能. emacs只是发扬光大而已.
假设你有一个目录, 里面是一个程式的原始码, 比如说, tin 的原始码, 放在 ~/tin-1.3beta 下面. 你想看它们.
首先, 叫emacs cd到该目录: M-x cd
然后, 建立tag table. tag table 就是一张对照表, 记录哪个符号(variable/function call) 对映到哪个档案的哪个地方. 有这张表, emacs可以让我们快速的在程式码内游走. 一般这张表是一个档案, 叫作TAGS (大写)
M-! etags *.c
M-! 是执行external shell command的意思. etags就是emacs的建表程式. 你只要告诉它你的source code在那里即可.
vi的话是使用ctags这个程式, 它建出来的档名叫tags (小写). 因为我们介绍emacs, 所以不管它.
然 后, 怎么看程式? 你知道所有的C 程式都是由main()开始, 所以你想找到main()在哪个档案. 这时只要按 M-. 然后emacs会问你tag table在哪里. 因为我们已经cd到该目录, 直接按enter就好了. 然后输入main, emacs就会把你带到main(){ ... }去.
如果 你看到某个程式片断呼叫一个你没看过的函式, 你可以把游标移到该函式的名字上, M-. ENTER 就搞定了.
如果 emacs找错了 (比如有变数和函式同名, emacs跳到变数去), 那你可以用 C-u M-. 找下一个.
在编辑程式码的时候, M-SPC 很有用, 它会把游标附近的空白缩成一个. 在其它地方也有效.
拼写检查
当然只是针对英文。
Ispell
选中一块区域,或者对整个编辑缓冲区进行拼写检查: M-x ispell-buffer RET, 这时会打开ispell缓冲区,C-h可以查看一些拼写检查的帮助信息。
检查单词。在一个单词上执行M-$,会对这个单词进行拼写检查。
单词拼写补全。在一个未拼完的单词后执行ESC TAB(M-TAB)。
只要启用过Ispell, 他就将一直在后台运行。M-x ispell-kill-ispell,可以杀死这个进程。
感觉很好用。
flyspell
一个扩展,可以在编辑的时候直接进行拼写检查,也就是spell-check on the fly。它也是利用Ispell。
M-x flyspell-mode RET
Tips
改变buffer的只读属性
M-x toggle-read-only
在C模式下输入tab
C-q TAB : 对TAB不做解释,直接输
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
C和C++模式
===指定为C++模式的方法===
一般根据扩展名自动设定,不用指定,不过有时候若希望.h文件是C++模式的(缺省是C模式),在文件第一行(或其末尾)上加入
// -*- C++ -*-
===语法高亮===
不是C模式专有,M-x global-font-lock-mode RET 或在.emacs中加入(global-font-lock-mode t)。
===子模式===
auto-state 输入时自动缩进,自动换行
hungry-state Backspace时,自动删除尽可能多的空白和空行
C-c C-t 同时转换(开/关)auto-state和hungry-state子模式
C-c C-a 转换 auto-state 子模式
C-c C-d 转换 hungry-state 子模式
===编辑命令===
C-c . 设置缩进风格(按TAB键可列出可用的风格,缺省的为gnu,其缩进为2个字符;linux为8个;k&r为5个,java为4个)
TAB 重新缩进当前行
M-/ 自动补齐(缓冲区中能找得到的串)
M-; 行尾加入注释
C-c C-e 扩展宏
C-c C-c 注释掉整个区域
C-u C-c C-c 取消注释
C-c C-/ 将区域中的每一行结尾都加入一个'/'字符
M-x c-beginning-of-defun
M-x c-end-of-defun 跳到函数的开头或结尾
C-c C-u 跳转到前面的一个#ifdef
C-c C-p
C-c C-n 跳转到宏的开头或结尾
C-M-h 选中整个函数区域
C-c C-/ 在所选区域的每一行后面添加" / "
C-M-p 跳转到}或)匹配的括号
C-M-n 跳转到(或{匹配的括号
M-x auto-insert 自动添加
#ifndef TEST_H
#define TEST_H
#endif
M-@ 把光标移动到单词开头,选中整个单词区域
C-M-h 选中当前行
C-u, C-@ 回到上次标签的位置
===编译和调试===
M-x compile RET 编译
M-x gdb RET 调试
C-x ` (出错信息中)下一个错误,一个窗口显示错误信息,另一个显示源码的出错位置
C-c C-c 转到出错位置
启动gdb调试器后,光标在源码文件缓冲区中时:
C-x SPC 在当前行设置断点
C-x C-a C-s step
C-x C-a C-n next
C-x C-a C-t tbreak
C-x C-a C-r continue
Dired模式
参考文档
常用命令:
m : mark
u : unmark
d : mark delete
D : 立即删除
x : 执行删除
g : refresh
C : copy
R : move
+ : 创建目录
Hideshow minor mode
在编程时可以隐藏函数的实现。M-x hs-minor-mode
(setq hs-minor-mode-prefix [(contrl o)]) 可以改变复杂的命令前缀.
用法:
`C-c @ C-h' : Hide the current block (`hs-hide-block').
`C-c @ C-s' : Show the current block (`hs-show-block').
`C-c @ C-c' : Either hide or show the current block (`hs-toggle-hiding')
`C-c @ C-M-h' : Hide all top-level blocks (`hs-hide-all').
`C-c @ C-M-s' : Show everything in the buffer (`hs-show-all').
十六进制模式
查看文本的十六进制编码
M-x hexl-mode
文件操作
- C-x C-f 打开文件,出现提示时输入/username@host:filepath可编辑FTP文件
- C-x C-v 打开一个文件,取代当前缓冲区
- C-x C-s 保存文件
- C-x C-w 存为新文件
- C-x i 插入文件
- C-x C-q 切换为只读或者读写模式
- C-x C-c 退出Emacs
编辑操作
- C-f 前进一个字符
- C-b 后退一个字符
- M-f 前进一个字
- M-b 后退一个字
- C-a 移到行首
- C-e 移到行尾
- M-a 移到句首
- M-e 移到句尾
- C-p 后退一行
- C-n 前进一行
- M-x goto-line 跳到指定行
- C-v 向下翻页
- M-v 向上翻页
- M-< 缓冲区头部
- M-> 缓冲区尾部
- C-M-f 向前匹配括号
- C-M-b 向后匹配括号
- C-l 当前行居中
- M-n or C-u n 重复操作随后的命令n次
- C-u 重复操作随后的命令4次
- C-u C-u 重复操作随后的命令8次
- C-x ESC ESC 执行历史命令记录,M-p选择上一条命令,M-n选择下一条命令
- C-d 删除一个字符
- M-d 删除一个字
- C-k 删除一行
- M-k 删除一句
- C-w 删除标记区域
- C-y 粘贴删除的内容
注意:C-y可以粘贴连续C-k删除的内容;先按C-y,然后按M-y可以选择粘贴被删除的内容
- C-@ 标记开始区域
- C-x h 标记所有文字
- C-x C-x 交换光标位置和区域标记区开头
- M-w 复制标记区域
- C-_ or C-x u 撤消操作
执行SHELL命令
- M-x shell 打开SHELL
- M-! 执行SHELL命令 (shell-command)
- M-1 M-! 执行SHELL命令,命令输出插入光标位置,不打开新输出窗口
- M-| 针对某一特定区域执行命令(shell-command-on-region), 比如 C-x h M-|uuencode
窗口操作
- C-x 0 关闭本窗口
- C-x 1 只留下一个窗口
- C-x 2 垂直均分窗口
- C-x 3 水平均分窗口
- C-x o 切换到别的窗口
- C-x s 保存所有窗口的缓冲
- C-x b 选择当前窗口的缓冲区
- C-x ^ 纵向扩大窗口
- C-x } 横向扩大窗口
缓冲区列表操作
- C-x C-b 打开缓冲区列表
- d or k 标记为删除
- ~ 标记为未修改状态
- % 标记为只读
- s 保存缓冲
- u 取消标记
- x 执行标记的操作
- f 在当前窗口打开该缓冲区
- o 在其他窗口打开该缓冲区
目录操作
- C-x d 打开目录模式
- s 按日期/文件名排序显示
- v 阅读光标所在的文件
- q 退出阅读的文件
- d 标记为删除
- x 执行标记
- D 马上删除当前文件
- C 拷贝当前文件
- R 重命名当前文件
- + 新建文件夹
- Z 压缩文件
- ! 对光标所在的文件执行SHELL命令
- g 刷新显示
- i 在当前缓冲区的末尾插入子目录的内容
- [n]m 标记光标所在的文件,如果指定n,则从光标所在的文件起后n个文件被标记
- [n]u 取消当前光标标记的文件,n的含义同上
- t 反向标记文件
- %-m 正则标记
- q 退出目录模式
说明:在目录模式中,如果输入!,在命令行中包含*或者?,有特殊的含义。*匹配当前光标所在的文件和所有标记的文件,?分别在每一个标记的文件上执行该命令。
程序编译
- M-x compile 执行编译操作
- M-x gdb GDB排错
- M-x dbx DBX排错
- M-x xdb XDB排错
- M-x sdb SDB排错
搜索模式
- C-s key 向前搜索
- C-s 查找下一个
- ENTER 停止搜索
- C-r key 反向搜索
- C-s C-w 以光标所在位置的字为关键字搜索
- C-s C-s 重复上次搜索
- C-r C-r 重复上次反向搜索
- C-s ENTER C-w 进入单词搜索模式
- C-r ENTER C-w 进入反向单词搜索模式
- M-x replace-string ENTER search-string ENTER 替换
- M-% search-string ENTER replace-string ENTER 交互替换
- C-r 在进入查找/替换模式后,该命令进入迭代编辑模式
- C-M-x 退出迭代编辑模式,返回到查找/替换模式
- C-M-s 向前正则搜索
- C-M-r 向后正则搜索
- C-M-% 正则交互替换
SHELL模式
- C-c C-c 相当于Bash下的C-c
- C-c C-z 相当于Bash下的C-z
- C-c C-d 相当于Bash下的C-d
- M-p 执行前一条命令
- C-n 执行下一条命令
- C-c C-o 删除最后一条命令产生的输出
- C-c C-r 屏幕滚动到最后一条命令输出的开头
- C-c C-e 屏幕滚动到最后一套命令输出的结尾
- C-c C-p 查看前一条命令的输出
- C-c C-n 查看后一条命令的输出
打印资料
- M-x print-buffer 先使用pr,然后使用lpr
- M-x lpr-buffer 直接使用lpr
- M-x print-region
- M-x lpr-region
收发邮件
- M-x mail 发送邮件, C-c C-s 发送,C-c C-c 发送并退出
- M-x rmail 接受邮件