Xemacs 和 Gnu Emacs 的比较
大多数 Linux 用户可能曾经使用过 Gnu Emacs 文本编辑器,即使只是出于好奇。Emacs 最初是作为程序员的编辑器而设计的,多年来不断发展,从各种贡献者那里积累了 LISP 代码片段。现在,关于该编辑器最常见的抱怨之一是其体积庞大以及随之而来的加载速度缓慢。Emacs 爱好者会指出,Emacs 旨在始终保持运行状态;在某些方面,该编辑器兼作操作系统环境或 shell。随着高速 CPU、更快的硬盘和更大容量的 RAM 变得更加经济实惠,这种抱怨已不再像以前那样令人担忧。
Emacs 通过其高度可配置和可扩展性弥补了这一小缺点。说出一个与文本相关的功能,可能就有一个 Emacs 模式可以促进它。许多人使用 Emacs 作为他们唯一的邮件和 Usenet 新闻客户端,而程序员会发现代码编辑、编译和调试对于各种编程语言都得到了很好的支持。您可以对任何类型的文本或代码进行语法高亮显示。shell 模式允许来自您首选 shell 的输入和输出成为缓冲区的内容,文本可以从中剪切并粘贴到其他缓冲区。邮件、新闻和特定于编程的模块等各种模式会根据需要加载和卸载。
尽管多年来许多人为 Emacs 贡献了模式和增强功能,但该程序仍然由自由软件基金会的 Richard Stallman 牢牢控制,他在 70 年代中期编写了第一个版本。
在 Gnu Emacs 与 X Window System 良好集成之前,出现了一群 Emacs 用户,包括个人和企业用户,他们对 Stallman 和 FSF 在该程序上取得的进展速度感到不耐烦。他们发起了一个项目,旨在改进 Emacs 的用户界面(特别是 X Window System 支持),目的是最终将两条代码线合并在一起。
参与其中的公司之一,现已倒闭的 Lucid, Inc.,将其名称命名为这个分支 Emacs 的第一个版本;您可能在 Linux FTP 站点或存档 CD 上看到过 Lucid Emacs 文件的存档。
当 Lucid 公司倒闭时,Lucid Emacs 获得了一个新名称,Xemacs。伊利诺伊大学、Sun Microsystems 和 Amdahl 公司成为该计划的主要机构和企业支持者。
在接下来的几年里,FSF 和 Xemacs 团队之间出现了冲突。Richard Stallman 同意将 Xemacs 代码合并到 Gnu Emacs 中,但他设定的条件是 Xemacs 开发人员无法接受的。结果陷入僵局。看起来在可预见的未来,两个版本的 Emacs 将并行开发。一方面,这可能看起来像是浪费了很多精力,但另一方面,引入了竞争因素,这在某些方面对最终用户有利。
如果不是因为 Xemacs,自由软件基金会可能很想固步自封。毕竟,即使是几年前的 Gnu Emacs 也是一个非常独特且值得尊敬的软件。近年来的改进趋势是改进和用户界面改进。基本编辑功能真的不需要太多工作。
虽然 Gnu Emacs 和 Xemacs 都是用 LISP 编程语言编写的,但底层结构差异很大,以至于在一个版本上运行的 LISP 附加软件包可能无法在另一个版本上运行。幸运的是,许多软件包维护人员正在尝试使其模块与 Xemacs 和 Gnu Emacs 兼容,尽管功能可能不完全相同。
例如,Bill Perry 的 W3 软件包将 Emacs 变成世界上唯一的基于 LISP 的 Web 浏览器,它与 Emacsen(一个奇怪的术语,通常用作 Emacs 的复数形式)兼容,但 Xemacs 版本将显示内联图像和背景,而 Gnu Emacs 则不会。
Xemacs 具有图标工具栏,并且多种模式,例如,前面提到的 W3 和 VM 邮件模式,都有自己的工具栏,这些工具栏仅在 Xemacs 中出现,尽管否则这些模式在 Gnu Emacs 中也能很好地运行。
Gnu Emacs 仅限于固定宽度字体,而 Xemacs 可以使用可变宽度比例字体。程序员对这个功能不会太感兴趣,因为使用比例字体时,源代码看起来参差不齐,更难阅读。我承认我从未觉得在文本编辑器中需要除固定宽度字体之外的任何东西,但品味和需求因人而异。
我发现了一些仅适用于 Gnu Emacs 的软件包。其中一个是 NC,它用类似 Norton Commander 的界面替换了原生的 Emacs 目录浏览器 Dired。
Linux 和许多其他操作系统的预编译二进制文件可从 ftp://ftp.xEmacs.org 及其镜像站点获得。通常,每个人都需要一个通用文件;其中包含平台无关的 LISP 文件和各种文档,混合了 GNU Emacs 文档和 Xemacs 特有的内容。一个较小的文件包含您平台的二进制文件。对于 Linux,您可以选择静态链接的 Motif 可执行文件、动态链接的 Motif 可执行文件(适用于那些拥有 Motif 库副本的人)以及动态链接的 Athena 可执行文件;如果您没有 Motif,后者可能是最佳选择。
如果您想编译自己的可执行文件,请准备好提供大量的磁盘空间。如果您“就地编译”,即源代码目录将是您放置 Xemacs 的位置,则 70MB 是可以工作的最低限度(包括解压缩的源代码)。这样,新的可执行文件将引用源代码目录中的 LISP 文件。否则,您还需要额外的 50MB 临时空间。Xemacs 目录树的结构被硬编码到可执行文件中;如果您想自定义它,Makefile 中有可以编辑的路径。
编译自己的可执行文件有多种原因——也许您不需要图标工具栏。我注意到,现在我更熟悉等效的击键,我很少使用它们,而且它们确实会占用您可能没有多余的内存。工具栏支持(以及弹出菜单支持)可以在编译时禁用,这有助于创建更精简的可执行文件。
另一个可能的更改是将常用的软件包包含在可执行文件中,而不是从 ~/.Emacs 初始化文件中单独加载它。
一旦您解压缩了大量的 Xemacs 存档文件,您很可能会对它们占用的磁盘空间量感到沮丧。幸运的是,您可以删除相当一部分文件,并且仍然拥有一个出色的编辑器。如果您查看 LISP 目录下的子目录,您会发现许多您可能永远不需要的庞大软件包,例如面向对象的浏览器和 Hyperbole。如果您不想将 Xemacs 用作 Web 浏览器(W3 实现得很好,但速度相当慢),则可以删除 W3 和 URL 子目录。我建议您花一些时间浏览 LISP 子目录;未字节编译的 *.el 文件是人类可读的,并且大多数文件都包含信息丰富的注释,这将帮助您决定是否要保留它们。通过简单地压缩所有 *.el 文件,可以回收大量的磁盘空间;Xemacs 根本不需要它们。它们包含在 Xemacs 中的原因是让用户有机会编辑它们以修改其行为。字节编译的 *.elc 文件是 Xemacs 实际使用的文件。
当启动任何版本的 Emacs 时,程序会立即检查您的主目录中是否有 .Emacs 文件。此 LISP 文件告诉 Emacs 您想要加载哪些软件包,并且可以设置大量的用户选项。Xemacs 附带一个 sample.Emacs 文件(在 /etc 子目录中),该文件带有很好的注释,并包含许多人认为有用的默认函数。更有用的是版本检测代码,它可以确定您正在运行的是 Gnu Emacs 还是 Xemacs 以及版本号。文件的不同部分由相应版本的 Emacs 读取,从而允许为任何版本的 Xemacs 或 Gnu Emacs 使用相同的 .Emacs 文件。
这允许用户同时安装和使用 Xemacs 和 Gnu Emacs,以便进行比较。Xemacs 19.14 更进一步改进了这一点,将其配置放在一个名为 ~/.xEmacs-options 的单独文件中,该文件从 ~/.Emacs 文件中调用。
虽然为了在您的 .Emacs 文件中引入您自己的函数和修改而编写 LISP 代码的前景可能看起来令人畏惧,但通过模仿其他人所做的事情来学习也是有效的。另一个帮助是两个版本都以分层 Info 文件的形式提供的详细文档。一些熟练的 Emacs 用户已将他们的个人 ~.Emacs 文件发布在网页上;使用 Lycos 或 Alta Vista 搜索关键字 Emacs、Gnu Emacs 或 Xemacs 将很容易找到此类页面。
虽然乍一看,Xemacs 似乎为用户提供了更多功能,但 Gnu Emacs 具有某些功能,对于某些人来说,这些功能将使其更有优势。如果您安装了 GPM 控制台鼠标服务器(大多数 Linux 发行版都包含此服务器),则 Gnu Emacs 可以很好地与之交互,从而在控制台模式下提供完整的鼠标支持。Xemacs 在控制台会话中的鼠标功能有限,但具有控制台中完整面部支持的优势,即语法突出显示将在控制台会话中起作用,尽管颜色不如 X 会话中那么多。
Gnu Emacs 具有方便的编辑功能:从文件中复制或剪切的文本可以从菜单栏上的下拉菜单访问,每段文本都由其前几个单词标识。虽然有一种在 Xemacs 中实现类似功能的方法,但它没有在发行版中记录。
如果内存使用量是您考虑的因素,则 Gnu Emacs 通常比 Xemacs 少使用约 2MB,并且其启动时间略短。当然,如果您想要任何一个 Emacs 的精简、低内存版本,您可以编译时不包含 X Window System 支持。
两个版本的 Emacs 都可以保护您免受文件丢失或未保存文本的困扰。在您键入时,当前缓冲区会定期(以用户可配置的间隔)保存到名为“#filename#”的文件中,该文件可以在以后的编辑会话中恢复。一旦文件成功保存,此临时文件将自动删除。保存文件时,还会创建正常类型的备份文件 (filename~)。在这些安全措施生效的情况下,很难丢失太多文本。
虽然 Gnu Emacs 和 Xemacs 都带有 HTML 编辑模式,但另一种可能性是 Nelson Minar 出色的 HTML-Helper-Mode。此模式可从 http://www.santafe.edu/~nelson/ 获得,速度快,具有良好的语法突出显示,并支持 Netscape 标签和表格。
Xemacs 的主要开发人员之一 Ben Wing 编写了一个精细的 SGML 编辑模式,这对于任何以 Linux 文档项目使用的 Linuxdoc SGML 格式编写文档的人都可能很有用。此软件包包含在 Xemacs 中。
VM 邮件系统包含在 Xemacs 中,并且可以单独获得以与 Gnu Emacs 一起使用。虽然 Rmail(原始的 Emacs 邮件客户端)随附在两个 Emacs 版本中,但它的功能不如 VM 强大,并且使用专有的消息格式,如果您希望使用其他邮件程序访问邮件文件夹,这将是一个麻烦。
还有 William Perry 的 W3,这是一个正在进行的项目(由 LISP 文件包组成),它允许 Emacs 用作 Web 浏览器。在其最新版本中,W3 支持样式表、内联图像、背景颜色和位图,甚至一些 Netscape 标签。但是,它是用 LISP 编写的,并且往往相当慢。关闭图形后,运行它就像运行改进后的 Lynx 作为 Emacs 的一部分。W3 绝对值得不时关注,因为开发正在积极进行,并且较新版本的 Xemacs 很可能也会针对运行 W3 进行优化。W3 的当前稳定版和 Beta 版可以从 ftp://ftp.cs.indiana.edu 的 /pub/eLISP/w3 目录中获得。
Larry Ayers (layers@vax2.rain.gen.mo.us),居住在密苏里州北部的一个小农场,目前正在为他的家人建造一座木框架房屋。他经营一家便携式带锯厂,从事一般的木工工作,演奏小提琴,并寻找稀有的草原植物,以及种植香菇。他还在努力为当地 ISP 配置 Usenet 新闻服务器。他的电子邮件地址是 layers@vax2.rain.gen.mo.us。