跟小弟我学习GNU Emacs - 08
第三章 使用编辑缓冲区
Emacs最有用的功能之一是它能够同时对多个编辑缓冲区进行编辑。
3.1 编辑缓冲区
Emacs里的一切编辑操作都发生在编辑缓冲区(buffer)里。虽然编辑缓冲区往往会有许多其他方面的用途,但它通常就是某个文件的工作副本。如果你正在编辑的编辑缓冲区里包含着某个文件的一个副本,那么当你保存自己所做的改动时,Emacs将把编辑缓冲区的内容复制到文件里。在实际工作中,在对编辑缓冲区进行完编辑之后,你完全可以不保存自己所做的修改。从另一方面讲,在一次编辑工作中,想把编辑缓冲区里的改动保存到文件里多少次也都可以。
Emacs可以不受限制地打开任意多个编辑缓冲区。在大部分时间里,同时显示在屏幕上的编辑缓冲区也就是一两个;但尽管看不到它们,在一次Emacs编辑工作中创建的编辑缓冲区也仍然是活动的。可以把它们想象为一摞纸,而显示在屏幕上的是最顶上的那张。可以随时翻看另外一张纸(即转到另一个编辑缓冲区),也可以随时给这摞纸再添上一张(即创建一个新的编辑缓冲区)。
特殊用途编辑缓冲区的创建工作由Emacs负责。这些内部编辑缓冲区的名字通常采用“*buffer name*”的格式。“*Help*”、“*三scratch*”、“mail”和“Buffer List*”等几个编辑缓冲区就是由Emacs自己创建的。
每个编辑缓冲区都有一个相关的主编辑模式,这个主模式左右着Emacs在这个编辑缓冲区里的大部分行为。比如,用来书写英文文本的文本模式,与用来编写LISP程序代码的LISP模式这两者的行为是不一样的。
那窗口又是些什么东西?窗口是显示器屏幕上用来显示编辑缓冲区内容的区域(注1)。换句话说,需通过一个窗口来查看一个编辑缓冲区。可能没有想过自己的显示器屏幕就是一个大窗口,但实际情况却是如此。每个窗口都有一个相关的状态行,并且通常也只有一个。
注1:这是Emacs对“窗口”的定义,它与X窗口系统和微软公司的Windows中的图形化用户界面意义上的“窗口”是不同的概念。在这些用户界面里,窗口是屏幕上一些有程序运行在其中的区域。为了与Emacs窗口有所区别,我们将把X窗口系统下的多窗口称为“窗格(frame)”,前者指的是Emacs屏幕画面上的区域,而后者则是图形化用户界面意义上的窗口。
虽然窗口和编辑缓冲区是两个很容易混淆的概念,可是两者之间的差异并不复杂。我们已经讲过,编辑缓冲区是文件的一个工作副本;而窗口则是显示器屏幕上的一个区域。可以在屏幕上让好几个窗口显示同一个编辑缓冲区---比如想查看同一文件的两个不同位置、或者想把一个地方的内容复制到另一个地方去的时候。比较常见的情况是在屏幕上用不同的窗口来代表不同的文件;或者是用一个窗口来显示某个文件的编辑缓冲区,用另一个窗口来显示Emacs某个内部的编辑缓冲区。
3.2 同时使用多个编辑缓冲区进行工作
输入“emacs filename”命令就能进入Emacs是大家都已经知道的事情了。如果还想再创建一个包含着另一个文件内容的编辑缓冲区,只需按下“C-x C-f”组合键来查找文件。Emacs将自动创建出第二个编辑缓冲区并转移于此。如果已经在某个编辑缓冲区里打开过这个文件的一个副本,“C-x C-f”命令将进到那个现有的编辑缓冲区里去---这种情况可能正是想要的;如果“C-x C-f”每次都从磁盘上读出文件,那么文件就将形成许多个版本,而各版本之间又几乎没有什么区别。如果给“C-x C-f”提供的文件名不存在,Emacs就会认为要用那个名字创建一个新的文件,它会进到一个空白的编辑缓冲区里(如果在输入文件名时打错了字,按下“C-x C-v”组合键将把你带回原来的文件。)
“C-x C-f”后面永远要跟有一个文件名;而在编辑缓冲区之间进行切换的“C-x b”命令的后面要跟着一个编辑缓冲区名。是否注意到状态行上只显示有编辑缓冲区的名字而没有文件名?有些版本的Emacs会把这两个名字都显示出来,但GNU Emacs只显示编辑缓冲区名。如果没有对它们进行过修改,那么编辑缓冲区名和文件名(如果有的话)就将是一样的。
上面提到的“C-x b”可以完成以下几件事:
如果在“C-x b”的后面输入了 |
Emacs将 |
一个新的编辑缓冲区名 |
新创建一个与任何文件都没有联系的编辑缓冲区并转移到那里 |
一个已有的编辑缓冲区名 |
进入那个编辑缓冲区(不论该编辑缓冲区是否与某个文件相关联) |
如果想创建第二个(或者第三个、第四个等等)空白的编辑缓冲区,按下“C-xb”组合键,Emacs将要求提供一个编辑缓冲区名。可以随意起个名字,比如parity, 然后按下回车键;Emacs将创建这个编辑缓冲区并进入其中。举个例子,假设在dickens编辑缓冲区里工作时忽然想起了点东西,决定打开一个新的编辑缓冲区来编辑《有种旅行叫作人生》刘相杰的作品。如下所示:
初始状态:正在dickens编辑缓冲区里编辑《有种旅行叫作人生(刘相杰作品)》。
按下:C-x b