查找文件在 Emacs 中,文件并不是在磁盘上编辑。相反,被指定文件的副本被放入缓冲区,所有的编辑在缓冲区中进行;写回磁盘文件是显式操作。当您要把文件装入缓冲区进行编辑时,您“查找”它。输入 C-x C-f 后在小缓冲区中产生如下的缺省提示符:Find file: ~/。按几次 Tab 键,得到目录列表,这样您就可以浏览到想要的文件(如下图所示)。然后按 Enter,把该文件读入缓冲区。
自动保存、保存和另存为好消息 ― Emacs 确实包含自动保存选项,通过配置该选项可以把您的文件保存到指定的位置。例如,在我的配置中,本教程的自动保存文件的名字是 #Living_In_Emacs.xml#,它位于和原始文件相同的目录。其它配置有不同的命名约定和保存位置(常常是 /var/tmp)。Emacs 自动保存的缺省值是在 30 秒空闲时间或 300 个输入事件后。
在本教程的开头,我介绍了 save-buffer 命令:C-x C-s。把缓冲区内容另存为不同文件名的对应键绑定是 C-x C-w。路径/文件名提示符出现在小缓冲区中,可通过一对 Tab 击键把它展开为目录列表,就象查找文件。
注意,使用 write-file 命令来另存后,缓冲区和新文件名相关联。如果您习惯于保持原文件名不变的编辑器,那么将要费点功夫来适应。
启动时的缓冲区使用多个缓冲区是很容易的。然而,Emacs 本身是一个文本应用程序,所以有一组命令用于切换缓冲区和查看它们。当 Emacs 不带文件参数启动时,有两个叫草稿(scratch)和消息(messages)的初始缓冲区。为了编辑,您打开的其它缓冲区的命名是根据包含它们内容的文件。
草稿缓冲区的命名是适当的。它被用于临时存储和快速 Emacs LISP 宏的开发和测试。Emacs 退出时,它没被保存,所以别把您在乎的东西留在那。消息缓冲区包含命令和后台活动的“系统级”输出,如下面的摘录所示。
1
2
3
4
| Loading sgml-mode...done
Auto-saving...done
Wrote /home/bilbrey/Documents/IBM/LIE/Living_In_Emacs.xml
Auto-saving...done
|
Emacs 中的窗口接下来,考虑 Emacs 中的窗口。第一步,您可以通过输入 C-x 2 来水平分割,从而得到当前缓冲区的两个视图(而 C-x 3 垂直分割它们)。这并不打开新缓冲区,因为那将是数据的独立副本。相反,它是同一缓冲区的窗口。
在可见窗口之间切换的键绑定是 C-xo,它绑定的命令是 other-window。它在可见窗口间循环。在学 Emacs 时,我常用这个命令来切入和切出帮助窗口。当我在写代码时需要经常在模块和头文件间转来转去的时候,它也很有用。
把您的窗口数目减为一的方法是输入 C-x 1,这将最大化当前包含光标的窗口并关闭其它窗口。
使用中的缓冲区试验缓冲区的方法是先打开多个测试文件。然后使用命令 C-x C-b 来列出所有的缓冲区。您的列表应和这相似:
1
2
3
4
5
6
7
| MR Buffer Size Mode File
-- ------ ---- ---- ----
.* practice1.txt 490 Text ~/practice1.txt
test2.txt 1 Text ~/test2.txt
test1.txt 0 Text ~/test1.txt
* *scratch* 191 Lisp Interaction
* *Messages* 501 Fundamental
|
MR 列反映每个缓冲区的“改过(Modified)”和“只读(Read-Only)”状态。Buffer(名)、Size 和 File 就不必解释了(分别是缓冲区、大小和文件),我们将在本教程末尾讲 modes。切换到缓冲区列表窗口(使用 C-x o),然后把光标移到您想打开的新缓冲区的那一行,再按 Enter 来选择它。缓冲区列表在窗口中被换成所选的缓冲区。如果您愿意,您可以最大化该窗口。
另外,有各种与缓冲区菜单有关的命令和相应的键绑定。通过输入 C-hd Buffer-menu- 在窗口中列出它们,然后按 Tab 键来得到命令列表。对我来说最有用的是用于退出的“q”。但是它并不关闭打开的窗口。您需要自己做。
再谈缓冲区如果您知道您的目的缓冲区的名字(我常常是这种情况),那么缓冲区列表的使用就没必要。先在小缓冲区中输入 C-x b 以得到提示符,然后输入目的缓冲区的名字 ― 或至少输入足够的多,以致于能用 Tab 键来完成。按 Enter,把那个缓冲区在当前窗口中打开。
关闭(kill)当前缓冲区的方法是输入 C-x k。出现在小缓冲区中的第一个提示符确认被关闭的缓冲区的名字。如果该缓冲区的内容没被更改过,按 Enter 来关闭该缓冲区。否则,将有第二个确认,用于丢弃更改过的缓冲区,只能回答“yes”或“no”。
复习:文件、缓冲区和窗口这一章要掌握的主要概念如下。
- 文件是磁盘上的实体。
- 缓冲区是文件中的数据的副本,可被 Emacs 编辑。
- 窗口是缓冲区的视图。
下表总结了前几屏中出现的命令。
键绑定操作(命令)C-x C-ffind-fileC-x C-ssave-bufferC-x C-wwrite-fileC-x 2split-window-verticallyC-x 3split-window-horizontallyC-x oother-windowC-x 1delete-other-windowsC-x C-blist-buffersC-x bswitch-to-bufferC-x kkill-buffer |