GNU Emacs 可能不是 Unix 上最古老的交互式文本编辑器——它可能早于或与 Vi 编辑器 齐名——也不是现存的 唯一 Emacs。然而,它无疑是最受欢迎的 Emacs,也是 POSIX 上可用的最佳编辑器之一。或者说曾经是,直到像 Atom、VSCode 和 Brackets 这样的全新编辑器出现在当今全新的开源领域。现在有如此多的强大文本编辑器可供选择,其中许多编辑器都在 Emacs 的思想和传统之上进行了迭代,以至于你很可能会想知道 GNU Emacs 是否仍然具有现实意义。
Emacs 自 1983 年以来
今天的开源与 1983 年 GNU Emacs 震撼编程界时有所不同。当时的 Emacs 令人兴奋,因为它确实是同类产品中最好的,并且可以在昂贵且专有的 Unix 安装基础上自由共享。今天,Emacs 只是众多主要为程序员设计的编辑器之一,其中最好的编辑器也是开源的。
Emacs 自 1983 年以来一直存在,这一点意义重大。虽然年龄绝不意味着质量或增长,但 Emacs 从一开始就一直在持续协作开发。如果您正在寻找长期稳定性,Emacs 是一个闪亮的例子。虽然自诞生以来它经历了重大变化,但可以合理地预期,10 年或更久之前的 GNU Emacs 在功能上与最新版本相同。有些 Emacs 用户在他们的 .emacs 配置文件中拥有可以追溯到 90 年代中期的自定义 hacks。我的一些配置选项是从导师那里借来的,所以我的配置早于我使用 Emacs,并且它们仍然有效。
使用 Emacs,您不仅限于调整主题元素或仅仅编写一个很酷的插件。当您 hack 您的 Emacs 配置时,您正在改变 Emacs 的运行方式以及您与其交互的方式。您创建了自己的 Emacs 体验,并且您可以尽可能长时间地保留这种体验。
以文本模式远程运行
就功能而言,Emacs 拥有的任何功能可能也存在于现代编辑器中。软件往往会以这种方式运行:应用程序会借鉴并整合其前辈的功能,因为这些功能被认为是基线期望。然而,Emacs 有一个难以匹敌的优势:它能够在终端中以纯文本界面运行,而不会丢失任何功能。
Emacs 的核心是一个 Lisp 解释器。您可以 将其视为 Python IDLE,但它用于 Lisp 方言而不是 Python。它可以作为终端中的文本界面运行,也可以作为带有 GTK、Aqua、Lucid 或其他 GUI 界面的 GUI 界面运行,或者作为另一个 Emacs 会话中的客户端运行。虽然您可能无法使用某些依赖于图形服务器的专用功能(例如,在终端中单独打开 PDF 作为图形文件不受支持),但所有核心功能和大多数扩展程序的操作方式与使用 GUI 时相同。
无遥测
并非所有文本编辑器都会跟踪您,但有些编辑器会这样做。有些编辑器不仅会记录您首次下载产品的情况,还会主动跟踪您的使用情况,无论您是否意识到这一点。正是因为这个原因,才有了像 VSCodium 这样的项目:帮助您编译几乎不包含跟踪软件的编辑器。不幸的是,编译“非官方”版本的编辑器(就真正的开源编辑器可以被称为“官方”而言)会使您无法运行某些扩展程序,因此有时您的选择是运行赞助公司提供的二进制文件,还是运行功能减少的编辑器。
GNU Emacs 帮助普及的自由软件许可保证了这种情况不会发生。您自己编译的 GNU Emacs 可以与 GNU 或发行版存储库提供的二进制文件完全相同。说实话,自己编译有时甚至更好,因为您可以调整构建方式以满足您的特定需求,但您永远不必不情愿地放弃功能。
Hack 代码,而不是 API
开源意味着您可以 hack 代码,无论如何。然而,hack 编辑器和调用 API 之间存在很大差异。对于许多现代文本编辑器,当它们宣传自己是“可 hack”甚至是“可扩展”时,它们实际上指的是核心开发人员提供的 API。这绝不是问题,但这与修改引擎本身的代码不同。使用 Emacs,当您为您的编辑环境编写 Lisp 修改时,无论是您 .emacs 配置文件中的一行代码,还是您提供给成千上万其他用户的精美插件,您都在重新编程您正在运行的内容。
有时,抽象是一件好事。通过实现 API,开发人员可以提供许多入口点来扩展他们的产品,例如为同一编辑器提供 JavaScript、Python 和 Ruby 接口。另一方面,API 就是 API,这意味着您只能使用所提供的功能。如果 API 开发人员没有预料到您想要访问某些数据对象,那么除非您 hack API 本身(对于开源来说,这完全有可能),否则您将无法访问该数据对象。
然而,Emacs 作为一个 Lisp 解释器,确保了您可以访问一切。在某种程度上,它是 Unix 本身承诺的实现:它赋予普通用户对其环境的最终控制权。在 Emacs 中,您可以开发在 Emacs 中运行的完整应用程序。如果您想开发一个应用程序,但没有时间设计 GUI 并构建使其全部有意义所需的复杂代码,您可以将 Emacs 用作您的脚本语言和您的平台。许多人已经这样做了,有时 取得了与 Emacs 本身流行度相媲美的成功。
最大化生产力
当您使用在复制的 Ctrl+C 和粘贴的 Ctrl+V 等常见约定出现之前发明的编辑器时,您需要一个学习曲线。Emacs 键盘表示法起初可能会令人困惑,例如 C-x C-f 打开文件或 M-d 向前剪切一个单词等指令。有一些方法可以缓解这种情况。您可以激活 CUA 模式,该模式使用 Ctrl+C 等快捷键进行复制。或者,您可以花时间创建一个替代键盘方案,以便您可以使用您习惯的快捷键(Ctrl+O 打开,Ctrl+Q 退出等等)。然而,像大多数坚持使用它的人一样,您可能会发现,一旦您学会了 Emacs 并将它有时晦涩难懂的命令记在脑海中,就很难再使用其他任何东西了。一位 Emacs 用户对 Emacs 快捷键上瘾如此之深,以至于他创建了一个 LibreOffice 插件,以便他可以像 Emacs 一样使用 LibreOffice!
当您熟练地使用 Emacs 时,输入单词的行为与用于编辑这些单词的命令序列的输入几乎没有分离。您的大脑不必在编写句子和返回几个单词进行快速更改、保存文件或复制和粘贴等等之间来回切换。这对 Emacs 来说都是一样的,您的手指永远不会闲着。没有比这更好的方法来最大化生产力了。
要熟练使用 Emacs 需要练习,但这并不比学习游戏控制台的手柄更多,也远少于学习乐器。但是,一旦您将其内化,Emacs 就会像游戏机一样解锁乐趣(尝试 M-x tetris),并几乎像乐器一样激发灵感。
现代时代的现代工具
与开源世界中的所有事物一样,使用 Emacs,您可以在他人的辛勤劳动的基础上进行构建。通过正确的 Emacs 软件包组合,您可以将 Emacs 转换为智能交互式开发环境 (IDE)、过度热心的打字机、角色扮演游戏 (RPG) 控制面板、议程、日历应用程序、多媒体播放器等等。
开源本质上不是一个非常有竞争力的野兽。您可以根据需要随时使用 Emacs,也可以使用其他编辑器。您不受忠诚度或合同的约束于任何单一工具。GNU Emacs 是现代时代重要的开源编辑器,以一些重要而有意义的方式捍卫软件和用户自由以及便利性。如果您还没有尝试过 Emacs,请试驾一下,看看您可以用它做什么。
9 条评论