跟我学习GNU Emacs - 09
准备输入一个新的编辑缓冲区名。
输入:xb1 RETURN

现在,可以往这个名为joyce的新编辑缓冲区里输入东西了。
上述操作与使用“C-x C-f”(命令名是find-file)组合键的情况并没有什么不同之处,两者唯一的区别是新编辑缓冲区joyce现在还没有与某个文件关联起来。因此,如果现在就退出Emacs,编辑器不会询问你是否想保存它。
“C-x b”特别适用于没有记住正在编辑的文件的名字的场合。假设正在编辑一个名字非常难记的文件---比如/tmp/80b16.12344文件;不小心按了某个键使这个编辑缓冲区从屏幕上消失了(这类命令我们马上就会在本章后面将到)。怎样才能让/tmp/80b16.12344文件重新回到屏幕上来呢?记住这个文件的全名或者哪怕是文件名的一部分了吗?没记住?别着急,在没有进行其他操作之间,立刻按下“C-x b”组合键。默认的编辑缓冲区恰好是刚才消失的那个;按下回车键,它又会重新出现。
还有一种办法是选择“Buffer(编辑缓冲区)”菜单,所有的编辑缓冲区都列在其中,从中挑选一个就行了。如果看到一些不是自己亲自创建的编辑缓冲区,可别大惊小怪---Emacs也会创建编辑缓冲区,这类编辑缓冲区的名字多是像“*Help*”和“*scratch*”的形式。
3.2.1 多个编辑缓冲区的保存
大家已经知道要想一个一个地保存编辑缓冲区要按下“C-xC-s”组合键。如果正在使用多个编辑缓冲区,就该知道按下“C-x s”(命令名是save-some-buffers)组合键可把它们都保存起来。Emacs会依次询问是否想保存每一个编辑缓冲区;回答“y”保存,回答“n”不保存。按下“!”键将使Emacs无条件地保存所有的编辑缓冲区。如果只想保存某个编辑缓冲区,其他的都不要,请输入一个英文句号(.)。如果想取消这个命令并且不保存当前的编辑缓冲区,按下“q”键(在按下“q”之前保存的编辑缓冲区都已经保存起来了;ESC对那些文件没有影响)。在决定是否需要保存某个编辑缓冲区之前,如果想先看看他里面的内容,请按下“C-r”组合键;Emacs将进入查看模式(view mode)--- 这个模式里的编辑缓冲区只能看,不能改。按下“C-c”组合键退出查看模式并回到保存编辑缓冲区的操作上来。
3.2.2 编辑缓冲区的删除
编辑缓冲区创建起来很容易,想删除它们也不难。如果觉得Emacs因为有太多的编辑缓冲区而变得磕磕绊绊,就会要删除一些编辑缓冲区。开始工作时也许使用了5个编辑缓冲区,可现在想换成另外5个继续工作;把前5个编辑缓冲区都删掉肯定会使工作更顺手一些。删除编辑缓冲区也是一种有用的应急措施---比如某些替换操作引起灾难性后果的时候,可以先删除那个编辑缓冲区并选择不保存所做的修改,然后再重新读取文件。
删除一个编辑缓冲区不会删除它所关联着的文件,也不等同于隐藏一个缓冲区的操作。被隐藏起来的编辑缓冲区依然是活动的,而被删除的编辑缓冲区则将不再是本次Emacs工作的一部分。还用一摞纸为例,删除一个编辑缓冲区等于从这摞纸里把一张纸抽出来扔掉。
删除编辑缓冲区也不会让用户冒丢失编辑修改的风险。如果对编辑缓冲区进行过修改(并且这个编辑缓冲区代表着某个文件),Emacs会询问是否需要在删除这个编辑缓冲区之前保存所做的修改。虽然对与文件没有关联的编辑缓冲区所做的修改将会丢失,但可能这些编辑缓冲区的命运无关紧要。
删除一个编辑缓冲区的方法是按下“C-x k”(命令名是kill-buffer)组合键或者从“File”菜单里选择执行“KillCurrent Buffer”(删除当前编辑缓冲区)操作。Emacs会给出当前显示的编辑缓冲区的名字,按下回车键就可以删除它。如果Emacs给出的编辑缓冲区名不是想删除的,那么可以输入另外一个编辑缓冲区的名字再按下回车键。如果准备删除的编辑缓冲区里还有一些没来得及保存的修改,Emacs会显示一条如下所示的消息:
Kill buffer (default xb1):
如果不想保存所做的修改,回答“yes”,Emacs将删除这个编辑缓冲区。如果想停止编辑缓冲区的删除操作,回答“no”。此后,可以先用“C-x C-s”组合键保存这个编辑缓冲区,再用“C-x k”组合键删除它。
还可以让Emacs就准备删除的每一个编辑缓冲区进行提问,从而有机会一个一个地决定是否要删除它们。如果想用这种办法来删除已经不再需要的编辑缓冲区,请输入“ESC x kill-some-buffers”。Emacs将依次列出每个编辑缓冲区的名字,并指出它里面有没有还未来得及存盘的修改,然后询问是否真的想删除它。
3.2.3 编辑缓冲区的重新命名
编辑一个文件的时候,编辑缓冲区的名字就采用文件的名字。如果觉得长文件名在使用中不方便,可以给编辑缓冲区重新起个名字(这种重命名只改变编辑缓冲区的名字,对文件名不会有影响)。这个功能最适用于某些自动补足功能不太完备的Emacs版本。GNU Emacs版本。GNU Emacs的自动补足功能是很不错的:当需要输入编辑缓冲区的名字时,只要输入其前几个字母再按下TAB键,Emacs就会自动补足那个名字。但肯定会有你想改变编辑缓冲区名字的时候。
重新命名编辑缓冲区的方法是:输入“ESC x rename-buffer”,Emacs提示输入新名字;输入它,再按下回车键。新名字将出现在状态行上。
前面讲过,GNU Emacs的状态行上只显示编辑缓冲区的名字,而不是一个编辑缓冲区名和一个文件名。即使给包含着文件的编辑缓冲区重新命名,Emacs也不会忘记编辑缓冲区和文件之间的对应关系;保存文件(“C-xC-s”)或查看编辑缓冲区清单试试,就会明白了。
可是若有两个同名的编辑缓冲区该怎么办呢?比如,正编辑主目录里一个名为memo的文件和自己某个子目录里一个名字也为memo的文件的情况。虽然两个编辑缓冲区都叫memo,但Emacs会给第二个编辑缓冲区的名字后面加上一个“<2>”以区别它们。用户可以用查看编辑缓冲区清单的办法来区分它们,查看编辑缓冲区清单的操作在本章后面就要讲到。下面是编辑缓冲区重新命名操作一种很有用的用法:如果想把哪个文件来自哪个子目录也表示出来,可以在修改编辑缓冲区的名字时把它们的子目录名也包括在其名字里,比如像“home:memo”和“staff:memo”的样式。
注意:如果有好几个编辑缓冲区的名字是“memo”、“memo<2>”、“memo<3>”的样式,就很可能是在给出文件名时弄错了它们的目录名。如果读取文件的时候弄错了目录,Emacs会认为想开始编辑一个新文件。举个例子,假设想编辑的文件是“~/work/memo”,但错误地输成了“~/novel/memo”。因为“~/novel/memo”原来并不存在,所以Emacs会新创建一个空白的“memo”编辑缓冲区。如果改正了这个错误(“C-x C-f ~/work/memo”),Emacs也将相应地重新命名编辑缓冲区:那个空白的编辑缓冲区“memo”与“~/novel/memo”文件关联,而真正想要的编辑缓冲区的名字将是“memo<2>”。
弄错文件的名字是一个很常见的错误,用下面这个办法可以解决它。如果发现“C-x C-f”命令找到的文件不对,可以使用“C-x C-v”命令,用自己想要的文件来替换它。“C-x C-v”会把查找到的文件放到当前编辑缓冲区里,而不是去创建一个新的编辑缓冲区。它的含义是“把真正想要的文件找出来并要它替换现在这个”。这个命令可以解决不必要地出现了大量带编号的编辑缓冲区(比如“memo”、“memo<2>”等)的问题。