Emacs 这个东东听说功能很强大。不过感觉有些难学,还好网络上的资源还是比较丰富的。目前基于最基本的文本编辑来学习。而且它的快捷键很多,所以要在使用过程中学习会比较容易记住。这个是从网上搜索来的,总结的比较好的,贴在自己这里当做摘录了,方便查询。
C = Control
M = Meta = Alt
S = Super = APPs
Del = Backspace
RET = Enter
我常用的 M-x 所以命令 C-x C-r 最近的文件 C-c C-l 重新加载配置
C-
基本快捷键 (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-< 到文件开头注意这里是‘<’不是‘,’需要按 shift,遇到相同情况下同
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+x C+f
打开文件
C+x C+r
以只读的方式打开文件
C+x C+q
进行只读/读写模式切换
C+x C+v
切换缓冲区
C+x C+s
保存文件
C+x C+w
文件另存为
C+x i
向缓冲区中插入文件
移动操作:C+f
前进一个字符 C+b
后退一个字符 M+f
前进一个单词 M+b
后退一个单词 C+a
移动到行首 C+e
移动到行尾 M+a
移动到句首 M+e
移动到句尾 C+p
后退一行 C+n
前进一行 M+g g
跳到指定行 C+v
向下翻页 M+v
向上翻页 M+< 移动到缓冲区首M+>
移动到缓冲区尾 C+M+f
向前匹配括号 C+M+b
向后匹配括号标记/复制/剪切/粘贴:C+xh
全选 C+@
标记开始 M+w
复制区域到 kill ring 中,但不删除 C+w
删除区域 C+y
将 kill ring 中的内容粘贴到缓冲区 C+Del
剪切光标到单词结束 M+Del
剪切光标到单词开始 C+k
剪切光标到行结尾 M+k
剪切光标到句结尾 (C+d)/Del
删除光标上的字 M+d
剪切光标到下一个单词结尾 ctrl-S (shift+s)-Backspace
删除当前行
缓冲区操作:
C+x C+f 打开/创建一个文件,并创建一个新的缓冲区
C+x C+s 保存缓冲区内容到文件
C+x C+w 保存缓冲区内容到其它文件
C+xk 关闭当前缓冲区
C+x C+b 显示缓冲区列表,可以使用方向键来选择缓冲区
C+x C+c 关闭所有缓冲区,并推出 emacs
M+x 命令:
查找和替换:
C+s 向前查找 C+r 向后查找按下这两个快捷键后,
M+p 显示上一个搜索词,
M+n 显示下一个搜索词。输入查找内容后,按 C+s 跳到下一个结果,
C+r 跳到上一个结果。
Enter 结束查找光标在当前位置,C+g 取消查找光标返回原处。
2,查找单词
按 C - s RET C - w 或 C - r RET C - w 来使用单词搜索。
3,查找及替换
按 M - %启动查找替换,输入要被替换的词,回车,然后输入要替换的词,再回车。
被替换的词会高亮起来,这时,输入 y 替换并跳到下一个,输入 n 忽略并跳到下一个,输入 q 结束,输入!替换剩下的全部。
一些常用的选项:
C - g 中断查找替换过程。
^ 返回上一个替换点,按 y 继续下一个,如果不想替换上一个的话,用^返回到上一个,然后按 C - r 进入编辑,修改完后按 C- M - c 退出继续下一个。
C - l 使当前匹配显示在文档中间。
C - r 进入修改。
4,列出匹配的模式
有时候想列出匹配的全面模式,而不是在文档中浏览,这个可以使用 occur 这个函数。
例子:M - x occur RET Create RET
这时,emacs 会新开一个窗口来列出匹配的行,用鼠标点击或把光标移到一行按回车就会跳转到那里。
执行 SHELL 命令
M-x shell
打开 shell 命令
M-!
执行 shell 命令(shell-command)
M-1 M-!
执行 Shell 命令,命令输出插入光标位置,不打开新输入窗口
M-|
针对某一特定区域执行命令 (shell-command-on-region), 比如 C-x h M-juuencode
窗口操作
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 d
打开目录模式
S
按日期/文件名排序显示
V
阅读光标所在的文件
Q
退出阅读的文件
D
标记为删除
X
执行标记
D
马上删除当前文件
C
拷贝当前文件
R
重命名当前文件
+
新建文件
Z
压缩文件
!
对光标所在的文件执行 SHELL 命令
G
刷新显示
I
在当前缓冲区的末尾插入子目录的内容
[n]m
标记光标所在的文件,如果指定 n, 则从光标所在的文件后 n 个文件被标记
[n]u
取消当前光标标记的文件,n 的含义同上
T
反向标记文件
%-m
正则标记
Q
退出目录模式
其他:
C+x u 撤销
C+x C+c 退出 emacs