我经常在服务器上工作,有时我会发现有些主机没有安装 GNU Emacs。通常会安装 GNU Nano,以避免我求助于 Vi,但我没有像习惯 Emacs 那样习惯 Nano,而且当我尝试保存文档时,我不可避免地会遇到麻烦(Nano 中的 C-x 代表退出,而 C-s 会锁定 Konsole)。
虽然在任何地方都能使用 GNU Emacs 固然很好,但对于简单地更新配置文件来说,它程序太大了。我对小型轻量级 emacs 的需求让我走上了发现 MicroEmacs、Jove 和 Zile 的道路——这些小巧、独立的 emacsen 可以放在拇指驱动器、SD 卡和几乎任何服务器上,这样您就不会在没有 emacs 编辑器的情况下。
编辑宏
术语 “emacs” 在某种程度上是一个通用术语,就像只有开源才能产生的那样,并且是一个混成词。在 GNU Emacs 出现之前,就存在批处理脚本(称为宏)的集合,可以为用户执行常见任务。例如,如果您经常发现自己输入 “teh” 而不是 “the”,您可以手动更正每一个(当您的编辑器甚至无法将整个文档加载到内存中时,这绝非易事,这在 1980 年代早期很常见),或者您可以调用宏来快速交换 “e” 和 “h”。
最终,这些宏被捆绑到一个名为编辑宏的软件包中,或简称为 EMACS。GNU Emacs 是最著名的 emacsen(是的,后缀 -en 用于描述多个 emacs,如单词 “oxen”),但它不是唯一的。而且它肯定不是最小的。恰恰相反,GNU Emacs 可能是最大的之一。
幸运的是,GNU Emacs 非常流行,以至于其他 emacs 实现都倾向于模仿 GNU 版本的大部分基本控件。如果您正在寻找一个基本的、快速且高效的编辑器,而不是 Vim,您可能会对这些选项中的任何一个感到满意。
MicroEmacs

MicroEmacs,也称为 uemacs(如希腊字母 µ,在科学计数法中表示 “微”),由 Dave Conroy 编写,但有很长的用户列表克隆并修改了它。一位维护 µemacs 个人版本的用户是一位名为 Linus Torvalds 的程序员,他的副本可从他的网站 kernel.org 获取(顺便说一句,该网站还包括他的一个小副项目,名为 Linux)。
大小
我在计算机上可以施加的最慢设置下编译 µemacs 需要五秒钟,生成的二进制文件仅为 493KB。诚然,与典型的 GNU Emacs 下载大小(100 万分之一的 70MB 是 70 字节,据我计算)相比,这实际上并不是 “微”,但它已经相当小了。例如,通过电子邮件或 Signal 发送给自己很容易,而且肯定足够小,可以放在您拥有的每个拇指驱动器或 SD 卡上。
默认情况下,Linus 的版本期望 libcurses,但您可以在 Makefile 中覆盖此设置,以便它使用 libtermcap 代替。生成的二进制文件足够独立,可以在大多数 Linux 机器上运行
$ ldd em
linux-vdso.so.1
libtermcap.so.2 => /lib64/libtermcap.so.2
libc.so.6 => /lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2
功能特性
键盘快捷键 与您期望的一样。您可以打开文件并进行编辑,而不会意识到您不在 GNU Emacs 中。
缺少一些高级功能。例如,没有垂直缓冲区拆分,但有水平拆分。没有 eval 命令,因此您不会使用 µemacs 进行 Lisp 编程。
搜索功能也与您可能习惯的不同:它不是 C-s,而是 M-s,如果您的终端模拟器将 Ctrl+S 接受为冻结命令,这可能会产生很大的不同。µemacs 的帮助页面非常完整,因此请使用 M-x help 来熟悉它提供的功能。
许可证
µemacs 的许可证是项目自定义的,带有非商业条件。您可以自由共享、使用和修改 µemacs,但您不能将其用于任何商业用途。
虽然不如我通常喜欢的政策那么宽松,但对于个人使用来说,这是一个足够好的许可证;只是不要围绕它建立业务。
GNU Zile

GNU Zile 声称是一个文本编辑器开发工具包。它旨在作为一个框架,使人们能够快速开发自己的自定义文本编辑器,而无需重新发明常见的数据结构。这是一个很棒的想法,可能非常有用,但由于我对制作自己的编辑器没有兴趣,所以我只使用其代码库附带的示例实现,作为一个令人愉悦的轻量级 emacs。
示例编辑器(据称称为 Zemacs,尽管它呈现的二进制文件名为 zile)的构建过程是标准的 Autotools 程序
$ ./configure
$ make
大小
从源代码编译它在一个核心上花费我一分钟,在六个核心上花费大约 50 秒(配置过程是漫长的部分)。最终生成的二进制文件为 1.2MB,使其成为我使用的最重的轻量级 emacsen,但即使与没有 X 的 GNU Emacs(在我的系统上为 14MB)相比,它也相对微不足道。
在我使用的轻量级 emacsen 中,它也是最复杂的。您可以通过在配置期间禁用功能来排除一些库链接,但以下是默认设置
$ ldd src/zile
linux-vdso.so.1
libacl.so.1 => /lib64/libacl.so.1
libncurses.so.5 => /lib64/libncurses.so.5
libgc.so.1 => /usr/lib64/libgc.so.1
libc.so.6 => /lib64/libc.so.6
libattr.so.1 => /lib64/libattr.so.1
libdl.so.2 => /lib64/libdl.so.2
libpthread.so.0 => /lib64/libpthread.so.0
/lib64/ld-linux-x86-64.so.2
功能特性
Zile 的行为比 µemacs 或 Jove 更像 GNU Emacs,但它仍然是一种极简体验。但一些小小的改进令人耳目一新:Tab 补全发生在缓冲区中,您可以从迷你缓冲区运行 shell 命令,并且您拥有大量可用的功能。但这绝不是 GNU Emacs 的替代品,如果您在搜索高级功能方面走得太远,您就会明白为什么它只有 1.2MB。
我一直无法找到应用程序内帮助文件,并且随附的手册页也很少。但是,如果您对 Emacs 感到满意,那么 Zile 是完整的 14MB(或更大,如果您使用的是 GUI 版本)版本与极其轻量级的实现之间的良好折衷方案。
Jove

Jove 是我的第一个小型 emacs,并且仍然是我发现的最小的 emacs。这对我来说是一个容易的发现,因为它随 Slackware Linux 一起发布,并且通过一个偷偷摸摸的符号链接,很快就成为我个人替换 Vi 二进制文件的工具。Jove 基于 GNU Emacs,但手册页警告说,功能对等性绝不是可以预期的。我发现 Jove 对于如此小的二进制文件来说功能非常丰富(事实上,本文是在 Jove 4.17.06-9 版本中编写的),但毫无疑问,将 .emacs 重命名为 .joverc 并不会像您可能希望的那样运行。
大小
在最慢的设置 (-j1) 下编译 Jove 需要五秒钟,而使用所有核心大约需要一秒钟。默认情况下,生成的二进制文件(令人困惑地称为 jjove)仅为 293KB。
Jove 二进制文件足够独立,可以在大多数 Linux 机器上运行
$ ldd jjove
linux-vdso.so.1
libtermcap.so.2 => /lib64/libtermcap.so.2
libc.so.6 => /lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2
功能特性
Jove 以手册页的形式提供了良好的文档。您还可以通过键入 M-x ? 并使用空格键滚动来获得所有可用命令的有用列表。如果您是 emacs 的新手,您可以运行 teachjove 来学习 Jove(以及相应的 emacs)。
大多数常见的编辑命令和键绑定都按预期工作。存在一些奇怪之处;例如,没有垂直拆分,并且迷你缓冲区中路径的 Tab 补全不存在。然而,它是我发现的最小的 emacs,但仍然具有完整的 GNU Emacs 感觉。
尝试 Emacs
如果您只尝试过 GNU Emacs,那么您可能会发现 emacsen 的世界比您预期的要丰富得多。emacs 背后有着丰富的传统,尝试其某些变体、衍生产品和替代实现是舒适使用 emacsen 工作方式乐趣的一部分。了解 emacs;随身携带几个版本,您将永远不必再次使用不合格的编辑器!
10 条评论