Chinaunix首页 | 论坛 | 博客
  • 博客访问: 713028
  • 博文数量: 112
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1192
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-12 16:46
文章分类

全部博文(112)

文章存档

2009年(4)

2008年(108)

我的朋友

分类: LINUX

2008-12-03 22:40:48

 

在这一部分中,将介绍最重要的 Emacs 缓冲区和文件命令:如何将文件载入缓冲区,如何将缓冲区保存到文件,如何在缓冲区间切换,以及如何“杀死”缓冲区。

当您用普通的方式启动 Emacs 时,它将向一个名为 scratch 的缓冲区开放,该缓冲区的用途显示在缓冲区顶部的一条消息中:

;; This buffer is for notes you don't want to save, 
and for Lisp evaluation.
;; If you want to create a file, visit that file with C-x C-f,
;; then enter the text in that file's own buffer.

模式行左边的区域始终用来显示当前缓冲区的名称。在此处,您可以看到这个缓冲区的名称,即 *scratch*。如果是 Emacs 自动创建的特殊缓冲区,其名称两边会有星号。

试着输入一行文本:This is a practice file. 然后再按 Enter,将光标向下移到一个新行。当您开始输入时,您会看到模式行的左侧出现两个星号,这表明当前的缓冲区中有未保存到磁盘的文本。

创建新文件的方法之一是将 scratch 缓冲区写到某个文件中。组合键 C-x C-s 会运行 save-buffer 命令,将当前的缓冲区保存到某个文件。正如您先前看到的,当您在一个无需保存的缓冲区中运行此命令时,Emacs 会显示相应的信息。但如果在您运行该命令的缓冲区中有未保存的更改,且该缓冲区与磁盘上的某个特定文件相关联时,缓冲区的内容会被写入该文件。如果您是在 新缓冲区或某个没有与文件关联的缓冲区(例如您现在所在的 scratch 缓冲区)中运行该命令,Emacs 将提示您指定用来保存该缓冲区的文件名称。

现在,请尝试下面的操作:键入 Ctrl-x Ctrl-s。看看在迷您缓冲区中是如何要求您给出要保存的文件名称的,如图 4 所示。现在键入 practice



保存 scratch 缓冲区

在您按下 Enter 后,Emacs 会在迷您缓冲区中报告,有一个名为 practice 的新文件已被写入磁盘。键入 C-x C-c,退出 Emacs,然后查看目录,找到您的文件:

$ ls
practice
$

关于 scratch 缓冲区,还有一件事是需要记住的。如果 Emacs 中没有打开其他缓冲区,那么 scratch 缓冲区会一直存在,当它是打开的唯一缓冲区时,是无法被关闭的。

要 使 Emacs 启动时将某个特定的文件的内容放进一个新的缓冲区中以便编辑,请提供此文件的名称作为参数。如果您提供了多个文件,则每个文件会在属于它自己的缓冲区中打 开。如果您提供的文件名在磁盘上不存在,Emacs 会为该文件创建一个新的缓冲区,并说明(在模式行中)这是一个新文件。这是您在启动 Emacs 并编辑一个新文件时所做的。当您将缓冲区保存到磁盘时,Emacs 将其写入文件,并使用您提供的参数做为它的文件名。

请试着用您的文件“practice”启动 Emacs:

$ emacs practice

您仍会看到 Emacs 的欢迎屏幕,但如果您按下一个键,如 C-g(或等足够长的时间),您会在 Emacs 窗口中看到您文件。没错,欢迎屏幕是另一个可供配置的选项。

Emacs 不会对文件的内容进行直接操作。它会把文件内容的副本读取到您编辑的缓冲区中。使用 C-x C-f,即 find-file 命令,以便用文件的内容打开一个缓冲区。

现在,请试着用这个命令打开您的文件:

  1. 键入 C-x C-c,退出 Emacs。
  2. 再次启动 Emacs,但这一回不指定您的文件:

    $ emacs

  3. 键入 C-x C-f,当迷您缓冲区中有相应要求时,请您提供文件的名称 (practice)。

C-x b 命令可以从当前缓冲区切换到您指定的另一个缓冲区。迷您缓冲区中始终会提供一个缺省的缓冲区选项。如果您按下 Enter 且没有指定缓冲区的名称,您会切换到上述的缓冲区。缺省值一般是您上次访问的缓冲区。如果您之前没有访问任何缓冲区,则缺省值通常为 scratch 缓冲区。

现在键入 C-x b,注意 scratch 缓冲区会作为建议项显示在迷您缓冲区中。键入 Enter,您的 practice 文件将从窗口中消失,代之以您熟悉的 scratch 缓冲区中的内容。(在缺省情况下,scratch 缓冲区会包含三行消息,但有时该缓冲区为空白。)再次键入 C-x b,然后按 Enter,切换回 practice 缓冲区。

在 Emacs 中,如果您希望创建一个新的缓冲区,请切换到您要指定名称的那个缓冲区。

再次键入 C-x b,不过要将该缓冲区命名为 mybuffer。注意,窗口是空的,这是一个全新的缓冲区。键入一行文本,然后按 Enter

On what wings dare we aspire? 

键入 C-xC-s, 将这个缓冲区保存到磁盘。注意,现在 Emacs 会要求您指定一个文件名。如果您创建的新缓冲区没有与磁盘上的某个文件关联,您可以在决定保存它时指定一个文件名。您指定的文件名不必与缓冲区名称相同, 可以把它命名为 practice.b,请注意,Emacs 会改变缓冲区的名称,使之与新文件相符。

请使用 C-x k 命令杀死某个缓冲区,或将其排除在您的 Emacs 会话之外。您将被提示键入要杀死的缓冲区的名称,当前的缓冲区是缺省缓冲区,如果您直接按下 Enter,会将它杀死。

现在试着杀死旧的 practice 缓冲区:键入 C-x k,然后当 Emacs 在迷您缓冲区中要求输入一个缓冲区名称时,键入 practice,然后按 Enter。practice 缓冲区会被杀死,而 practice.b 缓冲区则像刚才一样留在窗口中。

您已经知道了如何通过运行 C-x C-s save-buffer 命令,将缓冲区的内容保存到磁盘。您需要了解这一过程的更多信息。

模式行的前几个字符描述了缓冲区的状态。现在,在您的 practice.b 缓冲区中键入另一行文本,然后按 Enter

What the hand dare seize the fire?

注意,模式行中的两个破折号会变成两个星号。破折号说明缓冲区的内容与磁盘中的相同,而星号则表示缓冲区中有未保存的编辑内容。

保存更改并退出 Emacs:键入 C-x C-s C-x C-c。您的目录中会多出几个新文件:

$ ls
practice
practice.b
practice.b~

practice 和 practice.b 文件是您创建的,但 practice.b~ 则是一个由 Emacs 自动创建的文件。这是 Emacs 的备份文 件,当您每次在 Emacs 中编辑一个已经存在的文件时都会创建这个备份文件。当您将编辑内容保存到文件时,Emacs 会写到一个新文件中以制作备份,这个新文件的名称与原先的文件相同,只是多了一个波浪符号。旧的 practice 文件没有备份,因为您在创建它之后从未对其进行编辑。如果您此后在 Emacs 中编辑了它,Emacs 会将内容写入相应的 practice~ 备份文件。

Emacs 还会写入另一种文件,被称为 autosave 文件,它与原先的文件名称相同,但是在名称前后会各添加一个英镑符号。在您操作缓冲区期间,Emacs 会按设置的间隔向 autosave 文件写入内容。在缺省情况下是每输入 300 个新字符就向 autosave 文件写入一次。通常,在您杀死缓冲区时是不会见到 autosave 文件的。这是因为与缓冲区关联的 autosave 文件被删除了。如果您的系统崩溃,或您在编辑会话中失去连接,autosave 文件很有用,它为您提供了一个选择,使您可以在目录下找到这个文件以恢复丢失的编辑内容。

表 2 包含的是某些最常用的缓冲区和文件命令列表,在您学习 Emacs 的过程中将用到这些命令。该表提供了命令绑定的键盘输入和命令的函数名。请记住,您总能使用相应的键绑定,或将相应的函数名作为 M-x 的参数,以运行某个命令(请参考学习如何键入 Meta 组合键)。



绑定函数名描述
C-x C-s save-buffer 将当前的缓冲区保存到磁盘。
C-x s save-some-buffers 要求将所有未保存的缓冲区保存到磁盘。
C-x C-c save-buffers-kill-emacs 要求将所有未保存的缓冲区保存到磁盘,并退出 Emacs。
C-x C-z suspend-emacs 挂起 Emacs 并使之成为一个后台进程。
C-x C-b list-buffers 列出所有缓冲区。
C-x k kill-buffer 杀死一个缓冲区(缺省情况下为当前的缓冲区)。
C-x C-q vc-toggle-read-only 切换当前缓冲区的可读状态(如果适用还可以执行版本控制)。
C-x i insert-file 插入点插入某个文件的内容。
阅读(1894) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~