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

国瑞学用 emacs 续六

发布者:guo rue,发布时间:2016年3月28日 下午10:20   [ 更新时间:2016年3月28日 下午10:25 ]
模式
模式是在特定的内容类型的环境下 Emacs 特性的表达方法。也就是说,缩进的表现在 C 源代码文件和在 HTML 文件中是不同的,在给您的老板的信中的表现也是不同的。每个缓冲区的主要模式显示在状态行上缓冲区名字的右边的括弧中。

有两种不同的模式类型:主要和次要。每次只有一个主要模式被激活,但它们修改次要模式的解释。例如,在大多数的代码编写中,缩进参照的仅是上一行。在 .txt 文档中按 Tab 键(文本模式已被自动调用),一个制表符被插入并显示为 8 列。

而在这个 XML 文档中,Emacs 缺省地调用 SGML 模式。在这里,按 Tab 键有效果的前提是上一行的开头有空格,在这种情况下,光标被放在上一行第一个不是空格的匹配的那一列,距离由空格字符填充,而不是一个制表符。

缩进表现是次要模式的一部分,它的活动由当前调用的主要模式来修改。模式还可以直接表现为语法突出显示的区别和文本被自动填充的方式的区别。

再谈模式
主要模式通常由 Emacs 根据文件名或(有时)文件内容来正确设置。您可以明确地设置缓冲区的模式,方法是输入 M-x 加有效的模式名。

例如,如果我打开一个叫 bob.txt 的文件,缓冲区会以 text-mode 打开它。为了转入 c-mode,我输入 M-x c-mode。根据消息缓冲区,这实际上为我调用的是 cc-mode 并在状态栏上显示为 C Abbrev)。

列出 Emacs 自动识别的所有主要模式的方法是输入 M-x describe-variable,按 Enter,然后在小缓冲区的提示符后输入 auto-mode-alist。一些我常用的模式包括文本、c 和 SGML,有时还用 LISP。

编译代码
看了模式列表后,您显然可在 Emacs 中做很多事。然而最重要的是,Emacs 是程序员的编辑器。在 Emacs 环境中,您可以编写代码、编译、调试和测试软件,还可以做其它事。在这里,我不准备讲所有的这些主题,但让我们假设我已用 C 语言写了一个典型的 Hello World 之类的程序。

当我输入该程序并把缓冲区存到磁盘上后,我输入 M-x compile,于是,在小缓冲区中出现这样的提示符:Compile command:,后面可能还有缺省值。我输入 gcc -o hello hello.c 并按 Enter。一个编译窗口被打开,它包含如下的文本:
cd /home/nong/
gcc -o hello hello.c

Compilation finished at Sun Mar 17 16:18:55
为了查看我的程序能否运行,我从 Emacs 中运行它:M-! ~/hello。在小缓冲区中,我的输出是:“Hello, World!”

Emacs 和 LISP
Emacs 这个名字有点象 Editor MACroS 的缩写。所以,Emacs 中的另一经常的代码编写体验涉及在 LISP 的 Emacs 版本中设置变量和写宏。LISP 被嘲讽为“Lots of Insane Stupid Parentheses(许多神经病的愚蠢的括弧)”的缩写,但它在很多方面是一门成功的语言,尤其是 Emacs。

Emacs 变量可在命令行中设置(如果您知道它们的名字和适当的值),设置方法是输入 M-x set-variable ,然后在提示符后输入变量名和它的新值。您也可以直接通过求它们的值来设置变量。为此,我建议使用草稿缓冲区。从“LinuxDoc Emacs Beginner HOWTO”中借用一个示例(请参阅参考资料),让我们修改自动填充模式(即词语自动换行)的宽度:
(setq fill-column 20)
输入后,把光标留在行末,输入 C-x C-e 来求表达式的值。在小缓冲区中结果是 20。测试它的方法是使用 M-q(fill-paragraph)命令来重新格式化文本的一个段落。

随着您学习的深入,您还可以编写实现新功能的代码。通过试验找到您喜欢的设置。然后,您可以把它们放在您的 ~/.emacs 定制文件中,以便今后使用。

Emacs 中的连接
电子邮件和 Web 浏览工具已被构建到 Emacs 中。发送新的电子邮件消息的第一步是输入 %%%%IBS%%%% C-x m。当您写完后,用 C-x C-s 保存并发送您的消息。阅读邮件要稍稍复杂些。 参考资料 at the end of the tutorial Web 浏览的实现是通过把 URL 发送到外部的浏览器或直接在 Emacs 中运行象 Lynx 这样的文本模式浏览器。输入 M-x browse-url-lynx-emacs 来调用 Lynx,输入 URL,就可以了。下面运行的示例是在一个终端模式 Emacs 会话中的电子邮件撰写和浏览。

不停地工作,不能玩……
当然,游戏已被构建到 Emacs 中,有“Towers of Hanoi”和“Life through a variant of Tetris”(tm),还有古老的“Adventure”的另一版本,如下面的清单所演示的:
E/W Dirt road
You are on the continuation of a dirt road.  There are more trees on
both sides of you.  The road continues to the east and west.
There is a large boulder here.
>look at boulder
It is just a boulder.  It cannot be moved.
>climb boulder
You can't climb that.
...
甚至还有著名的 Rogerian 心理程序,Eliza,在早上三点,无论您怎样做都无法编译时,它能让您通过难关。输入 M-x doctor。它比任何 900 号码都便宜得多,是吗?

把叉子插入其中……
我们已完成!祝贺您漂亮地完成任务。我在很多年前学用 Emacs 时,我发现它有点……恐怖。我已尽力为您打下一个好的基础,使您掌握这个强大的编辑工具的概念和使用。

使用 Emacs。在其中生活一段时间,学会喜欢它。象所有的复杂程序,您得花些时间才能完全理解它,但这种努力是值得的:您将熟练掌握一个最常见的 UNIX 编程实用程序并学会肯定适应市场的技能。

参考资料
以下是使您更快掌握 Emacs 的一些参考资料:
        Linux 文档计划(Linux Documentation Project)中的 The Emacs Beginner HOWTO 是不错的入门读物。
        The GNU Emacs Manual%%%%IBS%%%% 是该编辑器的最终参考资料,链接来自 GNU Emacs 主页。
        如果您更喜欢 XEmacs,那么您需要访问 XEmacs 主页。
        在 IBM 的 developerWorks 站点,您可以找到各种参考资料,用于扩展您对 Emacs 的使用,例如 Using Regular Expressions。
        还有,在 Emacs 的讨论中如果不讲它在 Linux 文本编辑器范围中的死对头,那么这种讨论是不完全的。请查看 vi intro - the cheat sheet method,自己看看它到底怎样。
        Emacs 的终级的首选的参考资料是永远流行的 Learning GNU Emacs 和 GNU Emacs Pocket Reference,均来自 O'Reilly。请在您喜欢的在线或传统书商那挑选它们。
        Emacs 的授权协议是自由软件基金的 GNU GPL。
        如果您想获得更多关于 Emacs 的历史(和许许多多其它 UNIX 主题),请参见行话文件。