GNU Emacs 轻量级替代品入门

精简版(在大小和功能方面)替代品让您可以随身携带文本编辑器。
84 位读者喜欢这篇文章。
Text editor on a browser, in blue

我经常在服务器上工作,有时我会发现有些主机没有安装 GNU Emacs。通常会安装 GNU Nano,以防止我求助于 Vi,但我没有像 Emacs 那样习惯 Nano,而且当我尝试保存文档时,我不可避免地会遇到问题(Nano 中的 C-x 代表退出,而 C-s 会锁定 Konsole)。

虽然在任何地方都能使用 GNU Emacs 固然很好,但对于简单地更新配置文件来说,它还是太大了。我对小型轻量级 emacs 的需求促使我发现了 MicroEmacs、Jove 和 Zile——这些小巧、自包含的 emacsen 可以放在 U 盘、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

µemacs

MicroEmacs,也称为 uemacs(如希腊字母 µ,在科学计数法中表示 “微”),由 Dave Conroy 编写,但有很多用户克隆并修改了它。一位维护 µemacs 个人版本的用户是一位名叫 Linus Torvalds 的程序员,他的副本可以从他的网站 kernel.org 获取(顺便说一句,该网站还包括他的一个小小的副项目,名为 Linux)。

大小

在我的计算机上以我能施加的最慢设置编译 µemacs 需要五秒钟,生成的二进制文件仅为 493KB。诚然,与典型的 GNU Emacs 下载大小(70MB 的百万分之一是 70 字节,据我计算)相比,这并非真正意义上的 “微”,但它已经足够小了。例如,很容易通过电子邮件或 Signal 将其发送给自己,当然也足够小,可以随身携带在每个 U 盘或 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

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

Jove 是我的第一个小型 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;随身携带几个构建版本,你将永远不必再次使用不合格的编辑器!

接下来阅读什么

GNU Emacs 文本编辑器入门

GNU Emacs 文本编辑器自 1976 年问世以来一直存在,并且仍然是软件开发人员和作者的热门选择。它的主要重点是可扩展、可自定义、自我……

Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,而且经常同时工作。

10 条评论

我将以一个巨大的警告开始这篇文章:这里介绍的所有 “emacs 替代品”(与真正的 emacs 风味不同),只不过是在文本编辑器上使用 “emacs 模式”。Emacs 不仅仅是一个带有某些人为设计的键盘方案的编辑器,而是一个功能齐全的 Lisp 解释器,你可以在操作过程中动态重写它的核心功能。如果没有这一点,你就无法通过脚本、命令评估、模块(意味着没有 magit、org-mode 等)、工具集成(shell、编译器、调试器)来扩展或配置编辑器,除了前面提到的笨拙的键盘快捷键以及编辑器编写者决定硬编码到编辑器中的任何功能。

嗨 Seth,首先让我说我真的很欣赏你的文章!
我是一个真正的 Emacsen 狂热用户,从 90 年代初 Amiga OS 2.0 上捆绑的 MicroEMACS(当时就是这样拼写的)开始。
不可扩展的 Emacsen 通常被称为 “Ersatz Emacs”,现在我最喜欢的是 “mg”,它代表 micro GNU Emacs:软件包在许多发行版上都可用,尽管我最喜欢的 fork 是 https://github.com/troglobit/mg,因为它专注于可移植性以及与 GNU Emacs 的兼容性(我还为此维护了一个 Slackbuild,编译后大小约为 180 kB,使用 -Os)。

回复 作者 sethkenlon

我相信赋予 emacs 名称的宏是 Lisp 宏。Lisp 宏是重写代码片段的函数。这允许任何人有效地扩展编程语言,以便更好地表达他们正在解决的任何问题的解决方案。它们是 Lisp 语言家族最独特的功能。

如果你用 Control S 锁定控制台,请尝试 Control Q 解锁它。

幸运的是,Konsole 会在用户使用 Ctrl-S 锁定它时提醒用户,以及如何解锁它。尽管如此,这个技巧可能值得写一篇文章……但这将是一篇非常短的文章。感谢你清楚地写出来;这是一个很好的观点。

回复 作者 Karel Vervaeke (未验证)

至少你在开头提到的示例可以通过 TRAMP 解决。不要在你的服务器上运行 Emacs,只需远程打开文档即可 :D

很棒的观点,当然。GNU Emacs 让人们很难想象出它无法解决问题的场景!

回复 作者 Malte Gerdes (未验证)

我认为 jed (https://www.jedsoft.org/) 是一个出色的小型 emacs。

同意!Jed 是一个出色的小型 emacs。它默认安装在 Slackware 上,并且在我的简短列表中也包括了它,但我最终出于一些琐碎的原因决定不把它包括进来(它的大小占用空间与 Jove 相同,但它的链接库列表与 Zile 匹配,因此对于此列表的目的而言,它在两种不同的方面都显得多余)。

我打算在未来的文章中详细介绍它!

回复 作者:JohanSanden (未验证)

知识共享许可协议本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.