Emacs基本操作

本文档详细介绍了Emacs的基本操作,包括光标移动、删除、剪贴板使用、Undo/Redo、查找和替换、文件操作等。通过学习,读者可以掌握Emacs的常用功能,并了解其独特的“移除环”机制。Emacs作为一个高度可定制的文本编辑器,无论在Windows、Linux还是Mac OSX平台上,都能提供一致的体验。

引子

人们都说Emacs是神器,安装看看,这个神器确实够神:没有萌萌的图标,没有帅气的界面,没有性感的代码地图(SublimeText的mini map)。刚安装好的Emacs,就是一个呆到爆、土掉渣、傻到顶的“白痴”编辑器。

“就评这也能说是神器?在如今的编辑器大战中,Emacs也就是当作一个老古董任人凭吊了吧”。

好吧,其实刚刚装好的Emacs,就是一个刚刚初始的孩子,啥也不会,啥也不懂。都需要你亲手去调教呢。将来是一个小家碧玉,还是一个大家闺秀,抑或是一个女汉子,一切皆有可能啊。唯一可以确定的,如果你持之以恒的调整相关配置,未来一定可以得到一个为你量身定制的文本编辑器。而且,这个编辑器在Windows、Linux、Mac OSX、等主流浏览器上都有发行。

这也就是说,你会得到一个包打天下的神兵喔,是不是很吸引人?

我有心开一个Emacs的入门专题。在写这个专题的过程中,我也可以和大家一起学习,一起进步。

好吧,下面咱们言归正传,开始今天的话题。

Emacs以令人眼花缭乱的组合键“闻名于世”。要想使用好Emacs,死记硬背是不行的,多多的使用才是正途。然而,阅读Emacs使用手册、教程,有时会感到不够方便。因此各种各样的“CheatSheet”应运而生。简单的吧各种按键组合罗列起来,做“快速索引”我觉得还不够便捷。因此,我自己写了这篇文章,把我整理的“CheatSheet”写出来,作为积累保留以后检索使用。

Emacs中的基本文字编辑

Emacs是文本编辑器,虽然经过各位“牛人”的长期支持,Emacs已经在向“操作系统”演进,通过众多的“包”(Package),已经可以做到绝大多数你需要她完成的功能,所以Emacs中最基本的仍然是文字编辑功能。

使用Emacs编辑文本,主要涉及的功能包括:光标移动、删除文字、剪贴板的使用、Undo/Redo、文件操作等。下面我们一个个的来讲一讲。

Emacs中的光标移动

Eamcs中移动光标,和Windows操作系统中的绝大多数文本编辑器类似,可以使用“方向键”、“PageUP/PageDown”等按键完成。但是作为在“终端”时代生存至今的Emacs,还提供了让双手不离开键盘区,就可以移动光标的方法,而且在有的时候,这些组合按键的效率更高。

Emacs移动光标的组合键不少,我用下面这张图来说明。按图索骥,已经覆盖了Emacs原生的光标移动方法。

需要说明的是:在Emacs文档中,“Meta”键对应的是Windows键盘中的“Alt”键。

图1:Emacs光标移动图
图1:Emacs光标移动图
此外,Emacs移动到指定行的方法是:

重绘荧屏 ctrl-L(即,将光标所在行放到中间以便阅读,哈哈不用鼠标

哦,这就是用键盘的好处)

M-g M-g:Emacs会要求输入行号,移动光标到指定行

Emacs中的删除

在Emacs删除文字有很多种方法。在说明相应的操作方法前,我们需要先弄明白几个概念:“删除(Delete)”、“移除(Kill)”、“召回(Yank)”还有“移除环(Kill-Ring)”

好吧,“删除”和“移除”在文本编辑的过程中实现的效果非常类似——对应的字符或内容在文档中“消失”了。存在细微差别的地方在与取回这些“消失”的内容的方法上:

被“删除”的内容,只能使用“撤销(Undo)”的办法来找回这些“消失的字符”。和大多数人预想的一样,这些“消失的字符”只会重新出现在原来它们所在的地方。关于Emacs的删除操作请看下图:

图2:Emacs的删除操作
图2:Emacs的删除操作

Emacs的剪贴板以及Undo/Redo

被“移除”的内容,除了可以使用“撤销”的方法了找回内容以外,还可以使用“召回”的方法让这些“消失”的内容出现在当前光标之后。这样的操作效果和使用了“剪贴板”的效果类似了。

“召回”,是将移除的内容插入到光标所在位置的一种操作。使用召回操作,让人有一种使用“剪贴板”的感觉。不过Emacs会记录多次“移除”操作的内容,这一点可要比windows操作系统提供的“剪贴板”功能要强大多了。这种记录多次“移除”操作内容的机制在Emacs中叫做“移除环”——Yank Ring。

“移除环”是Emacs存储移除内容的一种机制,其中含有多次“移除”操作的内容。之所以称其为“环”是因为在Emacs中提供了在光标位置插入不同“移除内容”的方法。而访问“移除内容”时是按照“环”的方式循环访问的。关于Emacs的移除操作和召回操作请见下图:

图3:Emacs的移除和召回操作
图3:Emacs的移除和召回操作
如果输入时错误的使用了“撤销”命令,而需要“撤销前面的撤销”操作,Emacs提供了“重做(Redo)”的方法:随便移动一下光标,在使用“撤销”命令 即可。

Meta-y 可以切换不同的剪切的内容,按住M键,然后通过按y来进行选择

Emacs中的查找和替换

任何编辑器都有查找和替换的功能,Emacs也不例外。在Emacs中最常用的查找方法是“增量查找”。除此之外,Emacs还提供了“正则查找”、“词组查找”、“简单查找”三种方法。这些查找方法,一般来说,熟练掌握其中的一至两类就足够应付日常使用的需要了。

“增量查找”是“边输入边查找”的查找方式。也是在Emacs中使用最为频繁的一种查找方式。“正则查找”则是输入一个正则表达式来进行查找的方式。“词组查找”意味着输入的是一个词组(在英文等语言环境下,词组是有意义的。在中文环境下,应用的就少一些了)。“简单查找”和“增量查找”对应,是在用户输入完所有待查内容后才启动查找的方法。

几类查找的操作方法见下图:

图4:Emacs的查找
图4:Emacs的查找
有查找就有替换。在Emacs中,替换一般需要通过调用命令的方式实现。Emacs中提供的替换方式包括“全文替换”、“正则替换”、“交互式替换”三种方式。

其中“全文替换”和“正则替换”是从光标位置向后替换文字。“交互式替换”是在替换的过程中有控制的确定是否执行替换操作。

按Meta-% 即可启动查找且替换模式。

Emacs中的文件操作

基础的Emacs文件操作是创建、保存、另存。

创建新文件:
使用组合键 Ctrl-x Ctrl-f 打开“find file”
在提示符处输入一个不存在的文件名
回车确认后,Emacs即创建了一个空的Buffer供输入使用。
保存文件
Emac的保存文件非常简单,只需要按下组合键Ctrl-x Ctrl-s即可。
另存文件
要另存一个文件,按下组合键Ctrl-x Ctrl-w,按提示输入新的文件名即可。
BUFFERS
在emacs里面编辑的每一个文档都是一个buffer,可以通过C+x+C+f+‘文件名’进行切换
如当前emacs里编辑着两个文件,即两个buffer,‘foo’和‘test.cc’。
也可以通过按C+x+b+文档名来进行切换。
假设你忘记了文件的名字,那你可以先输入:
C+x+C+b 查看当前emacs打开的文档列表,可以用C+x+1来关闭打开的列表窗口。
其中里面有两项并不指向任何文档,Buffer ListMessages,这两项分别保存列表文档的名称,及保存emacs最低下显示的信息,你可以通过C+x+b然后输入这两个名字来查看他们的内容。
如果现在emacs打开了三个文档,你编辑完第一个后没保存,直接切换到第二个,同样是没保存直接切换到第三个,这时如果你想要保存前两个文档,除了分别切换到那两个文档然后再执行保存的方法外,还有更简单的方法是在第三个文档的界面下直接按C+x+s,这时底下的信息栏会一一问你是否要进行对第一个和第二个文档进行保存。

C-x,C-t 交换两行的位置(光标所在行和其上一行相换)
C-t 交换两个字符的位置(交换光标所在字符和其前一字符位置)
M-t 交换两个单词的位置(交换光标左右的两个单词位置)
M-u 使从光标位置到单词结尾处的字母变成大写
M-l 与M-u相反
M-c 使从光标位置开始的单词的首字母变为大写
C-x,u 撤销前一个命令
M-x revert-buffer RETURN (照着这个输入)撤销上次存盘后所有改动
使用正则表达式(Regular expression)搜索/替换
可在正则表达式中使用的符号:
^ 行首
$ 行尾
. 单个字符
.* 任意多个(包括没有)字符
< 单词开头
> 单词结尾
[] 括号中的任意一个字符(例如[a-z]表示所有的小写字母)

书签命令(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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值