计算机‎ > ‎软件‎ > ‎Linux‎ > ‎

国瑞学用 emacs 续五

发布者:guo rue,发布时间:2016年3月28日 下午10:09   [ 更新时间:2016年3月28日 下午10:11 ]
查找文件
在 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 退出时,它没被保存,所以别把您在乎的东西留在那。消息缓冲区包含命令和后台活动的“系统级”输出,如下面的摘录所示。
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-x o,它绑定的命令是 other-window。它在可见窗口间循环。在学 Emacs 时,我常用这个命令来切入和切出帮助窗口。当我在写代码时需要经常在模块和头文件间转来转去的时候,它也很有用。

把您的窗口数目减为一的方法是输入 C-x 1,这将最大化当前包含光标的窗口并关闭其它窗口。

使用中的缓冲区
试验缓冲区的方法是先打开多个测试文件。然后使用命令 C-x C-b 来列出所有的缓冲区。您的列表应和这相似:
 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-h d Buffer-menu- 在窗口中列出它们,然后按 Tab 键来得到命令列表。对我来说最有用的是用于退出的“q”。但是它并不关闭打开的窗口。您需要自己做。

再谈缓冲区
如果您知道您的目的缓冲区的名字(我常常是这种情况),那么缓冲区列表的使用就没必要。先在小缓冲区中输入 C-x b 以得到提示符,然后输入目的缓冲区的名字 ― 或至少输入足够的多,以致于能用 Tab 键来完成。按 Enter,把那个缓冲区在当前窗口中打开。

关闭(kill)当前缓冲区的方法是输入 C-x k。出现在小缓冲区中的第一个提示符确认被关闭的缓冲区的名字。如果该缓冲区的内容没被更改过,按 Enter 来关闭该缓冲区。否则,将有第二个确认,用于丢弃更改过的缓冲区,只能回答“yes”或“no”。


复习:文件、缓冲区和窗口
这一章要掌握的主要概念如下。

    文件是磁盘上的实体。
    缓冲区是文件中的数据的副本,可被 Emacs 编辑。
    窗口是缓冲区的视图。

下表总结了前几屏中出现的命令。
键绑定 操作(命令)
C-x C-f find-file
C-x C-s save-buffer
C-x C-w write-file
C-x 2 split-window-vertically
C-x 3 split-window-horizontally
C-x o other-window
C-x 1 delete-other-windows
C-x C-b list-buffers
C-x b switch-to-buffer
C-x k kill-buffer