Emacs编辑器的使用

A.1 Emacs简介 
前面已经介绍过一种全屏幕文本编辑工具Vi,这里将介绍另外一种功能强大、应用也非常广泛的全屏幕文本编辑器Emacs。 
Emacs全称为Editor MACroS,由于其移植性极好,所以在当今世界的几乎任何一个操作系统上都可以见到它的身影。现在的Emacs已经超出了原来的单一的文本编辑功能,可以用来管理文件、阅读公告板,甚至可以进行WWW浏览。另外Emacs源代码可以使用C、C++、Lisp等语言定制,对一些编程爱好者来说,这无疑是一大福音,同时也使其灵活性大大增加。 
Emacs编辑器的使用、操作与使用其他标准的文本编辑器一样。键盘上普通的按键用来输入字符,而编辑器的操作命令是通过键盘上的一些特殊的按键来实现的,例如Ctrl、Alt等控制键。与Vi不同,Emacs编辑器没有特定的输入模式与命令模式之分。在输入文本时,也可以执行编辑命令,例如用Ctrl键来移动光标、保存文件等,而不必忍受切换模式的麻烦。 
Emacs 编辑器是一个复杂且非常灵活的编辑器.它有好几百个编辑命令。Emacs编辑器也有一些特殊的特性,例如多窗口特性,可以在编辑文件时同时显示两个窗口。也可以同时打开并对多个文件进行编辑与操作,并在屏幕上与之对应的编辑窗口内显示各个文件。 
Emacs编辑器通过巧妙地控制、操作工作缓冲区来实现其强大、灵活的功能。Emacs编辑器可以被认为是面向缓冲区的编辑器。在任何编辑器中编辑文件时,该文件将首先被拷贝到工作缓冲区中,而所有的编辑操作都在工作缓冲区中进行。许多编辑器在编辑文件时仅开辟一个工作缓冲区,因此仅能打开一个文件。而Emacs编辑器可以同时开辟并管理多个工作缓冲区,因此允许同时对多个文件进行编辑操作,还可以用编辑缓冲区来保存、删除或拷贝文本,用户甚至可以开辟目己的缓冲区,并在这些缓冲区中保存文本,必要时可以把这些缓冲区内的文本保存到文件中。 
A.2 Emacs的启动与退出 
A.2.1 Emacs的启动 
通过键入: 
$ emacs [文件名] 
进入Emacs文本编辑程序。如果不键入文件名,则将创建一个新文件而不是打开现存文件(如图A-1所示)。 
图A-1 Emacs程序界面 
无论建立新文件还是打开一个现有文件,在处理方法上都是将其放入缓冲区中。和Vi一样,只要用户不发出存储到磁盘的命令,缓冲区的内容就不会写到文件中。同时这也使用户可以在多个缓冲区之间进行复制、粘贴等操作,非常方便。 
A.2.2 Emacs的退出 
当对文件做必要的修改后需要退出时,有几种可行的途径。如果对文件未做任何修改,则直接使用Ctrl+x、Ctrl+c即可退出Emacs;如果对文件做了修改,则同样使用以上按键组合退出,只是这时系统将询问是否保存文件,如果键入y,则系统保存文件;如果是个新文件,系统提示输入文件名,保存后退出。如果键入n,则系统将再次询问是否真的不保存缓冲区中的内容退出,这时回答yes则放弃所做修改退出;当然也可以先使用命令保存文件,然后再退出,这时可以使用Ctrl+x、Ctrl+s组合键,系统将保存文件并退出。如果要把编辑程序存到另一个和原来文件不同的文件中,可以使用Ctrl+x、Ctrl+w组合键,然后指定新文件名即可。 
如果用户正在进行Emacs的有关操作,需要Linux执行其他的操作,可以选择下列任何一种方法。 
1. 中止Emacs并返回Linux shell 
通过按Ctrl+z就可以中止任何Linux应用程序。该组合键将当前的应用程序放入后台并向用户提供另一个shell提示符。若要重新激活Emacs,可键入命令fg,将后台任务带回前台。若正在使用的shell不懂此命令,键入exit,重新激活Emacs。 
2. 从Emacs中发出一个shell命令 
如果不需要完整的shell环境,可以考虑在Emacs中使用shell命令。要在Emacs中使用shell命令,按Ctrl+u、Esc、!,之后将提示输入一个shell命令。输入命令并回车,Emacs将命令传递给Linux shell,然后shell执行这个命令。如果不在前面加上Ctrl+u命令,Emacs将把输出结果放到一个叫shell执行结果缓冲区中。如果需要关闭该窗口可以使用Ctrl+x命令。 
A.3 用Emacs编辑器创建文件 
利用Emacs建立新文件的步骤如下: 
1. 启动emacs(键入emacs并回车),可以看到图A-1所示的屏幕。 
2. 向缓冲区添加文件内容。 
3. 将缓冲区中的内容保存到某一文件中(假设文件名为mydata)。按Ctrl+x、Ctrl+s,然后键入文件名(mydata),再回车,就将缓冲区中的内容存入文件(mydata)中了。状态行上会显示如下信息: 
Wrote /root/mydata 
表示已建立了新文件(mydata),并把它保存到磁盘上。 
4. 按Ctrl+x、Ctrl+c退出Emacs。 
若退出Emacs时存在未保存的内容,Emacs会提示用户保存文件。在Emacs命令后输入想编辑的文件名,如果该文件名不存在,该文件将被创建。在下面的例子中,用户准备用Emacs编辑器来编辑名为mydata的文件。 
$ emacs mydata 
与Vi编辑器一样,Emacs编辑器是一个全屏幕编辑器。当编辑的文件是新创建的文件时,除屏幕的底部两行外,屏幕是空白的,光标将位于屏幕的左上角。如图A-2所示。 
图A-2 Emacs编辑器的编辑屏幕 
A.3.1 META键、Emacs屏幕及编辑模式 
Emacs编辑器的编辑操作与许多普通的文字处理器类似。Emacs编辑器仅有一种编辑模式��输入模式。如果键入任何字符键,键入的字符将被输入到编辑的文件中,所有的字符键都被用来输入字符,而不是用来输入命令。 
在一些计算机上有META键,即可以使用META-x组合键。在没有META键的计算机上,META-x等于先按Esc键,再按x键。有些系统的META键就是Alt(或者某一边的Alt键)。Emacs编辑命令基本上是一串Ctrl-x及META-x按键命令的组合(简记为C-x和M-x)。Alt键命令系列与Ctrl键命令系列的操作基本相同,即首先一直按住Alt键,再键入相应的按键,最后同时放开这两个键。但Esc键命令系列稍微有点不同:首先键入Esc键,然后放开该键,再键入相应的按键。Esc键的使用频率要比Alt键的使用频率高,因为很多早期的键盘根本没有Alt键。因此,本章主要介绍这些META键,同时必须记住,这些META键也可以用终端上的Alt键来代替。 
从图A-1、A-2所示的Emacs编辑器屏幕可以看出以下几个特点:首先有一组菜单选项(即Buffers、Files、Tools、Edit、Search、Mule、Help)。所有的Emacs命令都可从这个下拉菜单执行;屏幕的最下面一行是小缓冲区,主要用于显示使用过的命令;倒数第二行被称为状态行,主要显示如下信息:文件名、当前模式、光标位置和当前位置在文件中的相对位置;状态行以上的所有屏幕都被称为缓冲区。 
在状态行上显示的是正在编辑的文本的状态信息。状态行由几个部分组成,其形式如下: 
--1-:ST-F1 BulfferName (模式)--Lx—Place---------- 
第一个域是ST(Status),它表示若最近对文件进行了修改,该修改的文件是否已经被保存过。如果该域是两个星号(“**”),表示该文本已经被修改过,但没有保存;如果该域是两个连字符(“--”),表示该文件从最后一次保存到现在还没有被修改过。 
BufferName域表示该工作缓冲区的名字,这个工作缓冲区名将是目前编辑的文件名。而Lx表示光标当前的位置,Place域表示光标当前处于被编辑的文件的何处。例如,如果Place域是40%,那么,表示光标当前大约位于文件的40%处。在下面的例子中,状态行表示该文件自最近一次修改以来,还没有被保存过,工作缓冲区的名字是mydata,光标处于文件的第4行。 
--1-:**-F1 mydata (Fundamental)--L4--All----------- 
Emacs 在小缓冲区下有“自动补全”功能。该功能可以为用户节省许多时间。当在小缓冲区输入文本串、一行长命令或输入文件名时,就可以用到自动补全功能。如果有两个以上的选择,它也会显示选项列表。这个功能对Ctrl+x、Ctrl+f等文件编辑功能也是有效的。 
A.4 编辑操作及命令 
Emacs编辑器的编辑命令能执行许多操作,其他编辑器基本上也有类似的编辑操作。Emacs编辑器中所有的编辑命令基本上都通过Ctrl键、Alt键或Esc键组成的命令序列来完成与实现。所有这些编辑命令也都有对应的命令名,用户可以在小缓冲区中输入这些命令。如果从xterm上进入Emacs,则可从编辑器屏幕上方的下拉菜单中选择菜单选项来执行相应的命令。本节将介绍一些常见命令。 
A.4.1移动命令 
Emacs编辑器有一组基本的光标移动命令。Ctrl+f命令用来将光标前移(右移)一个字符,而Ctrl+b命令用来后移(左移)一个字符。Emacs编辑器把一个文件看作一种流式字符串,而不是一系列的文本行。向后移动光标命令将使光标沿流式文本左移一个字符(例如在当前行的行首将光标左移一个字符时,光标将回到上一行的行尾)。向前移动光标命令也是如此。 
也有一组编辑命令能使用户在文件中以行为单位移动光标或整屏移动光标。Ctrl+n命令将把光标移动到下一行上,如果此时光标位于屏幕最后一行,屏幕将下滚,使当前行的下一行显示在屏幕上。Ctrl+p命令将把光标移动到上一行,如果此时光标位于屏幕最顶行,屏幕将上滚,使当前行的前一行显示在屏幕上。Ctrl+v命令及Esc v命令将整屏滚动文本。Ctrl+v命令将使文本向前滚屏并显示下一屏文本,而Esc 命令将使文本向后滚屏并显示上一屏文本。 
由于上面几条命令是在键盘上没有方向键时开发的,所以可能很多新用户会不大习惯这种使用。事实上,现在的键盘都有方向键,可以使用上下左右四个方向键来替代这四个命令。甚至Emacs程序支持PageUp和PageDown键上下翻页。 
用户也可以以单词、段落等为“计量单位”来移动光标。META键命令Esc f及Esc b用来以单词为单位前、后移动光标。 
Esc a命令可以把光标移动至句首,而Esc e命令将把光标移动至句尾;Ctrl+a命令将把光标移动至行首,而Ctrl+e命令将把光标移动至行尾;Esc <命令将把光标移动至文件的第一行,而Esc >命令将把光标移动至文件的结尾。 
可以在编辑命令前输入Emacs编辑器的重复命令来重复执行一个命令,此重复命令是Esc num,这里num是重复次数。例如,要右移光标5次,首先输入重复命令及重复的次数,然后键入Ctrl+f命令。 
也可以用相同的方式使用重复命令完成重复输入:首先键入Esc命令,再键入命令重复执行的次数,最后键入输入的内容。例如,Esc 3 T命令将往文本中输入三个T字符。 
A.4.2 删除命令 
删除文本意味着永久地删除文件中的字符。有两类基本的删除操作:一类是删除光标所在处的字符,另一类是删除光标之前的字符。Ctrl+d命令和Del键将删除光标所在处的字符,BACKSPACE键将删除光标之前的字符。 
A.4.3 删除缓冲区及移动文本 
在Emacs编辑器中,删除文本与剪切文本是有区别的。删除文本将永久地将文本从文件中删除,而剪切文本只是将文本从缓冲区中删除,而编辑器会将其拷贝到kill缓冲区中保存,必要时可以将其恢复。剪切文本时,每一个kill缓冲区将依次保存被剪切掉的文本。kill缓冲区是一个循环链表,当所有的kill缓冲区都被占满后,第一个kill缓冲区将被下一个被剪切的文本覆盖。 
还可以以不同的“计量单位”来剪切文本,例如,Esc k命令将从光标所在字符开始一直删除到句子结尾。 
Ctrl+k命令将剪切从光标所在位置至行尾的所有字符。要剪切整行字符,必须首先用Ctrl+a命令将光标移至行首,然后键入Ctrl+k命令。然而,此时Ctrl+k命令并不删除该行,该行依然存在,只是该行将成为没有任何字符的空行。要删除字符的同时删除该空行,需要键入删除命令:Ctrl+k Ctrl+k,其中,第二个Ctrl+k命令将删除空行。实际上,要删除空行就是删除新行标识字符(键入回车键时)。如果想同时删除多行,可以在Ctrl+k命令之前输入重复命令。例如,Esc 10 Ctrl+k 命令将删除光标以下的10行文本。 
在任何时候,都可以把kill缓冲区中的文本插入到文本中去。从这种意义上说,kill命令意味着对文件中的文本进行移动操作。首先剪切它们,于是该文本会在文件中删除,但是,以后可以把光标移至任何地方,并插入已经剪切掉的文本。如果被恢复的内容并非用户所需要的,可以使用Esc y命令继续切换到前面被剪切的内容,直到找到需要恢复的内容为止,但Esc y命令必须在Ctrl+y命令后面使用方才有效。 
Ctrl+y命令可以把剪切的内容插入到文本中去。在kill缓冲区中的任何文本都将被插入到编辑的文本中。如果kill缓冲区保存了单词,Ctrl+y命令将插入单词,如果kill缓冲区保存了一行或多行文本,Ctrl+y命令将插入一行或多行文本。 
移动文本涉及到两个过程:首先用剪切命令将文本剪切到kill缓冲区,然后使用命令Ctrl+y来插入文本。这有些类似剪切、粘贴的过程。在下面的例子中,一系列的命令将当前行上移三行。 
[例]屏幕初始状态如下: 
Welcome to emacs world!come on! 
This is an example! 
I’m a root user. 


键入命令: 
Ctrl+k Ctrl+k 
Esc 3 Ctrl+p(此命令可用上箭头键完成上移3行的操作) 
Ctrl+y 
之后,屏幕显示如下: 
I’m a root user. 
Welcome to emacs world!come on! 
This is an example! 


如果意外地剪切了多行文本或将文本插入到了不想插入的地方,可以用Ctrl+x u命令取消这一意外操作。甚至可以用Esc x命令取消自开始这一次编辑以来所有的修改。 
A.4.4 插入命令 
用户需要输入一段新文本时,首先需要将光标定位到插入点,然后可以按各种字母键来插入文本,按回车键插入一个新行,用Ctrl+j命令在光标所在位置插入一个换行符,用Ctrl+o命令在当前行上面插入一个新行。 
A.4.5 查找命令 
任何一个完整的文本编辑程序都应该有查找和替换的功能,Emacs也不例外。查找命令支持从当前位置向前或向后查找,也支持环绕查找,即查找到文件尾后自动跳回文件头,或是从文件头跳回文件尾。查找到字符串后,光标定位在该字符串的第一个字符上,如果未能找到指定字符串,则返回查找失败的信息。 
需要注意的是,当Emacs成功查找到第一个字符串时,如果用户不按Esc键,则仍处于查找状态;并且如果输入其他字符串,Emacs将会开始新一轮的查找,直到用户按Esc键中止查找过程为止;而且是在用户输入待查找字符串的同时就开始查找。这种查找方式称为增量查找。如果用户不需要增量查找,可以在输入查找命令时加上Esc键。 
Ctrl+s命令将从光标所在处开始向文件末尾正向查找需要查找的字符串。Ctrl+s命令将把光标放置在编辑器的小缓冲区上,用户可以在小缓冲区中输入要查找的字符串。一旦键入字符,Emacs编辑器就开始查找,若继续输入字符,Emacs编辑器将继续查找正在输入的字符串。例如,如果想键入字符串preface,一旦键入字符“p”,光标将移动至文件中与模式“p”匹配的字符处。继续键入字符“r”,光标将移动到与“pr”匹配的字符串处。要结束模式的输入,可以键入Esc键。下面是在文件中正向查找的基本格式:Ctrl+s 字符串。 
Crtl+r命令将从光标所在处开始反向查找需要查找的字符串。这两个命令都不支持环绕查找。多次执行Ctrl+s命令后,光标将停留在文件的结尾,而Ctrl+r命令将停留在文件的首行。Emacs将保存最后一次的搜索模式。直接键入Ctrl+s或Ctrl+r命令而不键入搜索的模式,编辑器将用前一次的搜索模式进行搜索。 
使用Ctrl+g命令可以随时终止当前的查找过程。 
Emacs编辑器还允许使用正则表达式及特殊字符。要在查找时使用正则表达式,可以在Ctrl+s或Ctrl+r查找命令之前键入Esc键,即Esc Ctrl+s或Esc Ctrl+r命令允许在查找字符串中使用正则表达式。 
A.4.6 替换操作:全局替换命令与查询替换命令 
在Emacs编辑器中,可以使用全局替换命令或查询替换命令操作来实现文本的替换。查询替换操作允许执行单个的替换,当执行查询替换操作时,如果编辑器查找到与输入匹配的字符串,编辑器将询问是替换该字符串还是不执行替换操作而直接进行下一次与输入匹配的查找,或者退出当前的查询替换操作。因此,执行替换时,查询替换比全局替换具有更多的控制权。进行正则表达式搜索时,这两个操作都有与之对应的特殊命令。 
1. 全局替换:Replace-string命令 
可以直接在编辑器的小缓冲区中使用replace-string命令来执行全局替换操作,且在键入replace-string命令后,不必键入任何键。其操作过程如下:首先键入Esc x命令进入编辑器的小缓冲区,然后键入replace-string命令,编辑器提示用户输入要查找的字符串及要替换的字符串。Replace-string命令不能实现正则表达式的替换,如果要使用正则表达式,必须使用replace-regexp命令。 
2. 查询替换命令 
Esc %命令用来执行查询替换操作。它首先搜索到与模式匹配的字符串,然后在必要时替换该字符串。要执行查询替换命令,首先键人Esc %命令,然后键入要被替换的模式,并回车,再键入要替换的字符串并回车。完成上述操作之后,将搜索到与被替换的模式匹配的第一个字符串,同时出现几个选项,每个选项都有与之对应的按键。例如,如果键入y,搜索到的字符串将被替换字符串所替换,同时,光标将位于已被替换掉的字符串上;如果键入n,将取消替换操作,同时,光标将位于搜索到的字符串上。其格式如下: 
Esc % 
Query replace:<被替换字符串> <RETURN> 
Query replace <被替换字符串> with:<替换字符串><RETURN> 
Query replacing <被替换字符串> with <替换字符串>:(? for help) 
查询替换命令的选项见下表: 
y或者Spacebar键 替换搜索到的字符串 
n或者Del键 取消替换搜索到的字符串 
^ 回到前一个搜索到的字符串 
! 替换所有没有替换的与模式匹配的字符串 
ESC键 退出本次查询搜索 
[例]下面的命令序列将用yogurt字符串替换文本中的模式milk,然后继续下一次查找。

<script type=text/javascript> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript> </script> <script>window.google_render_ad();</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值