经验与技巧:Emacs编辑器的使用
发表于:2007-07-04来源:作者:点击数:
标签:
A.1 Emacs简介 前面已经介绍过一种全屏幕文本编辑工具Vi,这里将介绍另外一种功能强大、应用也非常广泛的全屏幕文本编辑器Emacs。 Emacs全称为Editor MACroS,由于其移植性极好,所以在当今世界的几乎任何一个操作系统上都可以见到它的身影。现在的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,然后继续下一次查找。用户可以按Esc键退出查询搜索操作。
Esc %
Query replace: milk <RETURN>
Query replace milk with: yogurt <RETURN>
Query replacing milk with yogurt:(? For help) y
与其他查找命令一样,查询搜索命令不允许在输入的查找字符串中使用特殊字符。但如果想使用特殊字符,可以使用query-replace-regexp命令,要运行该命令,必须首先键入Esc x命令进入编辑器的小缓冲区中。
A.4.7 文本修改操作
Emacs还提供了一些文本修改命令,便于用户对文本进行编辑操作。
在执行文本修改命令之前,一定要注意光标所在位置。因为后面进行的操作都直接取决于光标所在位置。如果出错,可能会得到意想不到的结果。
文本修改命令主要有:
Ctrl+t 将光标所在的字母前移一个位置
Esc t 将光标所在的单词前移一个位置
Ctrl+x Ctrl+t 调换光标所在的两个相邻行
Esc c 强制光标所在单词的词首为大写
Esc l 强制光标所在处到词尾的所有字母为小写
Esc u 强制光标所在处到词尾的所有字母为大写
表A-1列出了Emacs编辑器的一些编辑命令。
表A-1 Emacs编辑器的编辑命令
命 令 功 能
Ctrl+b 光标左移一个字符,即向后一个字符
Ctrl+f 光标右移一个字符,即向前一个字符
Ctrl+n 光标下移一行,即移至下一行
Ctrl+p 光标上移一行,即移至上一行
Ctrl+v 向下滚动一屏
Esc f 光标移至下一个单词
Esc b 光标移至上一个单词
Esc a 光标移至句首
Esc e 光标移至句尾
Esc v 向后移动一屏
Ctrl+a 光标移至行首(行上第一个非空格字符)
Ctrl+e 光标移至行尾(行尾最后一个非空格字符)
Esc < 光标移至缓冲区头部(通常是文件头部)
Esc > 光标移至缓冲区尾部(通常是文件尾部)
Esc num 重复执行其后的命令num次
Backspace 删除光标前的字符
Del或Ctrl+d 删除光标所在处的字符
Esc k 删除光标后至行尾的所有字符
Ctrl+k 删除(kill)至行尾
Ctrl+k Ctrl+k 删除(kill)至行尾,并同时删除(kill)行尾的换行字符
Ctrl+y 把剪切内容插入到文本中去
Esc y 切换到kill缓冲区中保存的前一个被剪切文本
Ctrl+x u 取消前一次命令
Ctrl+j 插入一个新行
Ctrl+o 在当前行上面插入一个新行
Ctrl+s 正向查找文件中与输入匹配的字符串
Ctrl+g 中止当前的查找过程
Ctrl+r 反向查找文件中与输入匹配的字符串
Esc Ctrl+s 正向查找文件中与正则表达式匹配的字符串
Esc Ctrl+r 反向查找文件中与正则表达式匹配的字符串
Replace-string 执行全局替换
Replace-regexp 对正则表达式执行全局替换
ESC % pattern <RETURN>replacement <RETURN> 查询与输入匹配的字符串,再执行替换操作SPACEBAR 替换搜索到的字符串DEL 取消替换Esc 退出查询替换操作! 替换所有没有替换的匹配字符串^ 移动至前一替换处
Ctrl+t 将光标所在的字母前移一个位置
Esc t 将光标所在的单词前移一个位置
Ctrl+x Ctrl+t 调换光标所在的两个相邻行
Esc c 强制光标所在单词的词首为大写
Esc l 强制光标所在处到词尾的所有字母为小写
Esc u 强制光标所在处到词尾的所有字母为大写
A.5 在Emacs编辑器中使用多窗口 Emacs编辑器中的多窗口允许在窗口内浏览同一文件的不同部分或同时浏览多个文件。一个窗口命令通常是在Ctrl+x命令之后指定一个数字,例如Ctrl+x 2将在编辑器中重开一个窗口,Ctrl+x 0将关闭当前窗口。Emacs编辑器中的窗口命令见表A-2。
表A-2 Emacs窗口命令
命 令 功 能
Ctrl+x 2 垂直方向分割一个窗口
Ctrl+x 3 水平方向分割一个窗口
Ctrl+x o 选择另外一个窗口
Ctrl+x 0 关闭当前窗口
Ctrl+x 1 关闭除当前窗口外的所有窗口
Ctrl+x ^ 增加窗口的高度
Ctrl+x } 增加窗口的宽度
如果同时打开了多个窗口,那么,光标所在的窗口称为当前窗口,也称为活动窗口。任何编辑命令与编辑操作都是针对于当前活动窗口的。可以用Ctrl+x o切换到另一个窗口,Ctrl+x o将按窗口打开的次序在几个窗口之间连续切换。可以用Ctrl+x 0命令来关闭一个窗口,用CTRL+x 1命令来关闭除当前窗口之外的所有窗口。
当打开一个新的窗口的时候,可以把该窗口放置在当前窗口旁或当前窗口下。可以用Ctrl+x 3命令把当前窗口沿水平方向分割成两个并排的窗口,而用Ctrl+x 2命令把当前窗口沿垂直方向分割成上下两个窗口。
一旦打开一个窗口,就可以使用Ctrl+x ^及Ctrl+x }命令调整窗口的大小,其中,Ctrl+x ^命令将沿垂直方向增加窗口的高度,Ctrl+x }命令将沿水平方向增加窗口的宽度。
在文件中移动文本或字符块的时候,窗口是非常有用的。例如,首先给正在编辑的文件重新打开一个窗口,此时,新的窗口将显示与原窗口一样的文本,在新窗口中,把光标移动到文件的其他地方,并剪切文件中要剪切的字符块至kill缓冲区,再切换到另一个窗口,就把刚才剪切的文本插入到当前窗口中光标所在的位置。
A.6 缓冲区与文件 进行文本编辑时,编辑器首先读入文件的内容至内存缓冲区中。一个内存缓冲区实际上是一段用来保存编辑文件的内存,也可以把它理解为一个字符串数组。随后的任何编辑与修改操作都是在这一缓冲区中进行的,必要时,还可以把缓冲区中的内容保存到磁盘上。
Emacs编辑器的编辑操作也是如此,即Emacs编辑器的编辑与修改操作都是在缓冲区中进行的。用户可以使用编辑缓冲区来保存文件或用作其他用途,甚至可以创建增加的缓冲区,并在缓冲区中保存字符串,如果需要,也可以把用户创建的缓冲区的内容保存到文件中去。
A.6.1 文件缓冲区
当打开一个文件时,用来保存文件内容的缓冲区也将被创建。我们可以仅仅只创建一个文件缓冲区,进行必要的编辑之后再把编辑的内容保存到文件中去。在任何时候,该缓冲区将与其编辑的文本之间建立联系,因此该缓冲区称为文件缓冲区。命令系列 Ctrl+x、Ctrl+f filename将打开一个文件并为其创建一个文件缓冲区;命令系列 Ctrl+x、Ctrl+s将文件缓冲区的内容保存到磁盘上,相当于常用的“保存”命令;Ctrl+x、Ctrl+w将当前缓冲区内容保存到磁盘,与上一个命令不同的是,它将询问新文件名,类似于常用的“另存为”命令;而命令系列 Ctrl+x、Ctrl+c将退出编辑的文件。
还有一些有关文件操作的命令,在前面已经提到,如Ctrl+x、Ctrl+f命令将命令中指定的文件打开放入一个新缓冲区中;Ctrl+x、Ctrl+r命令将命令中指定的文件打开放入当前缓冲区中,同时该缓冲区中的所有内容被覆盖;Ctrl+x、i将命令中指定文件内容插入到当前光标所在的位置上。文件缓冲区的有关命令在表A-3中列出。
表A-3 Emacs文件缓冲区与缓冲区命令
文件缓冲区命令 功 能
ctrl+x ctrl+f 打开并读取一个文件到缓冲区
ctrl+x ctrl+s 把缓冲区的内容保存到一个文件中
ctrl+x ctrl+c 退出编辑器
ctrl+x ctrl+v 关闭当前的文件,并读取一个新的文件到当前窗口
ctrl+x i 把文件的内容插入到一个缓冲区
ctrl+x d 进入列目录缓冲区。该缓冲区列出了当前目录下的所有文件与子目录,可以移动到其他的文件或目录下,也可以显示其他目录中的文件。此外,还可以选择并打开一个文件。n 移动到下一文件或目录p 移动到前一文件或目录e 如果当前光标在一个目录上,将进入该目录下。如果当前光标在一个文件上,则打开该文件。s 标识一个文件,表明将保存该文件d 标识一个文件,表明将删除该文件u 取消删除文件标识x 执行标识的文件
ctrl+x b 切换到另一缓冲区。编辑器将提示输入要切换的缓冲区的名字(要创建一个新的缓冲区,输入新的缓冲区的名字即可。)另一个作用是退出列目录实用命令。
ctrl+x k 删除(kill)一个缓冲区
ctrl+x ctrl+b 显示所有的缓冲区列表。
ESC x buffer-menu 从缓冲区列表中选择一个缓冲区d或k 标识一个将要删除的缓冲区u 取消一个缓冲区的标识s 标识一个将要保存的缓冲区x 执行标识的缓冲区
可以同时打开多个文件,每个文件都有自己的缓冲区。要在屏幕上同时显示多个文件(即文件缓冲区),可以用前一节介绍的窗口命令来实现。Ctrl+x 2命令首先创建一个新的窗口,然后键入命令系列Ctrl+x Ctrl+f <文件名>,以便在新创建的窗口上显示文件缓冲区内容。
Emacs编辑器有一个特殊的实用命令称为列目录命令。该命令将交互式地列出当前目录下所有文件的文件名,并允许用户选择相应的文件,以便对该文件进行编辑、保存甚至删除等操作。要进入列目录实用命令,就键入Ctrl+x d命令。键入该命令后,当前目录下的一系列文件将被显示在屏幕上(见图A-3)。这一系列文件将组成一个文件名列表,该列表如同一个菜单,而当前目录中的每一个文件名就是该菜单的一个菜单项,您可以在各个菜单项之间来回移动,并可以执行各种操作。
图A-3 Emacs编辑器的列目录功能
列目录实用命令有自己的一组命令,这一组命令用来在不同的文件名列表项之间移动或选择文件名列表项。n命令用来下移一个文件名列表项,而p命令用来上移一个文件名列表项,e命令用来打开当前文件,以便对该文件进行编辑与修改。如果被选中的文件名是一个目录,则列目录实用命令将使用户进入该目录,并显示该目录中的所有文件。字符串“..”表示当前目录的父目录,选择该项将回到当前目录的父目录下,并同时显示其父目录中的文件。
可以保存或删除文件名列表中的文件。移动至一个文件名列表项上,键入s命令,标识该文件将被保存;移动至一个文件名列表项上,键人d命令,标识该文件将被删除(实际上该文件并不会立即被删除,直到您退出列目录实用命令后才会删除标识了的文件)。请记住,可以用u命令来取消文件的删除或保存标识。用Ctrl+x b命令退出列目录实用命令,并回到先前编辑的窗口(即先前编辑的文件缓冲区)。
A.6.2 独立缓冲区(Unattached Buffers)
使用命令Ctrl+x b,可以创建一个与任何文件都不相关联的缓冲区,也称为独立缓冲区。当键入Ctrl+x b命令,Emacs编辑器将立即提示您输入所创建的缓冲区的名字,如果该缓冲区并没被创建过,则Emacs编辑器将创建这个新的缓冲区。也可以使用Ctrl+x b命令转换到指定的缓冲区。键入Ctrl+x b命令,并在提示符后键入缓冲区名,则该缓冲区中的内容将被显示在当前窗口中。因此,通过命令Ctrl+x b,可以在不同的缓冲区之间来回切换。命令Ctrl+x Ctrl+b将列出所有缓冲区的名字。
如果想在新的窗口上创建一个新的缓冲区,首先必须创建一个新的窗口,并切换至该窗口,再使用Ctrl+x b命令来创建一个新的缓冲区。
每个缓冲区不必有其独立的窗口,同样可以用Ctrl+x b命令来在不同的编辑缓冲区之间进行切换。例如:Ctrl+x b topics将使用户切换到topics编辑缓冲区。此外,编辑器根据缓冲区创建的顺序给予编号,不带任何参数的Ctrl+x b命令将按顺序在缓冲区之间进行切换。
与前面介绍的列目录命令一样,用一个特殊的实用命令可以管理缓冲区。命令buffer-menu是一个交互式实用命令,该实用命令将显示所有的缓冲区的名字。与列目录命令一样,您可以修改、删除及保存缓冲区。首先用Esc x命令进入编辑器的小缓冲区,然后键入buffer-menu命令。
A.7 Emacs的常用组件 前面已经讲过,Emacs绝对不是一个简单的文本编辑器,事实上它包含的组件是相当丰富的,功能也非常齐全。为了节省磁盘空间,用户在安装时可以选择其中几种进行安装。下面是Emacs扩展的一些组件。
· E-xdired或Ctrl+x d:目录管理;
· E-xman:用户使用说明;
· E-xshell:打开一个命令模式,不过不能运行vi、elm、tin等等程序;
· E-xgnus:阅读
新闻或者读信;
· E-xrmail:读信;
· E-xmh-rmail:读信;
· E-xmh-smail:发信。
A.8 编辑器帮助 Emacs编辑器提供几个实用帮助程序,例如在线帮助(online help)与帮助指南(tutorial)。键入Ctrl+h系列命令来访问实用帮助文件。例如,键入Ctrl+h命令之后再键入一次Ctrl+h命令将列出所有可能的帮助选项,其中有一个特殊的帮助就是tutorial。键入Ctrl+h t命令将进入在线帮助指南(online tutorial),该帮助可以提供一些特殊的Emacs编辑器教程。表A-4列出了Emacs编辑器的部分帮助命令。
表A-4 Emacs编辑器帮助命令
帮助命令 功 能
ctrl+h ctrl+h 列出所有的帮助选项
ctrl+h i 访问Emacs帮助手册(manual)
ctrl+h t 运行Emacs编辑器的帮助指南tutorial
ctrl+h b 显示它们代表的按键与命令
A.9 Emacs编辑器小结 Emacs编辑器是一个面向缓冲区的文本编辑器。键盘上所有的键都是输入键。所有的命令都要使用Ctrl键或META键。一个META键可以是Alt键或Esc键。Emacs编辑器编辑的文本文件是面向字符的,而不是面向文本行的。我们可以以字符、单词、行或段落为单位在文本中移动光标。
Emacs编辑器在delete(删除)与kill(剪切)文本之间有较大的区别。delete是永久地从文件中删除文本,而kill则首先将文本删除到缓冲区,必要时可以访问这些缓冲区。这些缓冲区通常称为kill缓冲区,而这些kill文本的命令也称为kill命令。在Emacs编辑器中,常有一些术语如kill一个单词或kill一行,它们指的是将一个单词或文本行剪切至kill缓冲区。我们可以把kill缓冲区的内容插入到文件中去。通过以下方式来移动文本:首先把文本剪切至kill缓冲区,然后把它插入到文件中适当的地方。
Emacs编辑器允许在屏幕上同时打开多个窗口,在这些窗口中,可以显示多个不同的文件,也可以显示同一文件。可以沿水平或垂直方向把一个窗口分割成多个窗口,这些窗口可以用来显示文件的不同部分,并可以把一个窗口内的文本剪切至kill缓冲区,然后切换并插入到另一个窗口的文本中,从而完成字符块的移动。
可以同时打开多个文件,每个文件都有其自己的缓冲区。也可以创建自己的缓冲区,这些缓冲区不依赖于任何文件。用户可以在各个缓冲区之间方便地切换,以便对缓冲区进行编辑。甚至还可以访问kill缓冲区,并对它们进行编辑。Buffer-menu实用命令提供一个菜单界面,该菜单界面会列出所有的缓冲区,用户可以非常方便地选择要编辑的缓冲区。
可以同时在各自的窗口中显示不同的缓冲区。用来保存文件内容的缓冲区称为文件缓冲区。当在屏幕上显示多个文件缓冲区的时候,实际上是在屏幕上同时显示多个文件的内容。列目录实用命令提供给用户一个菜单界面,该菜单将列出当前目录下的所有文件,可以在该菜单界面上打开、保存或删除指定的文件。
原文转自:http://www.ltesting.net