GNU Emacs 可能不是 Unix 上最古老的交互式文本编辑器——它可能早于或与 Vi 编辑器相提并论——也不是现存的唯一的 Emacs。然而,它肯定是迄今为止最受欢迎的 Emacs,也是 POSIX 上最好的编辑器之一。或者它曾经是,直到像 Atom, VSCode, 和 Brackets 这样的全新的编辑器出现在当今全新的开源领域。 现在有如此多的强大的文本编辑器可供选择,其中许多编辑器已经迭代了 Emacs 的想法和传统,你很可能会怀疑 GNU Emacs 是否仍然有意义。
自 1983 年以来的 Emacs
今天的开源与 1983 年 GNU Emacs 震撼编程界时的情况不同。当时的 Emacs 令人兴奋,因为它确实是同类产品中最好的,并且可以在昂贵且专有的 Unix 安装基础上免费共享。 今天,Emacs 只是众多主要为程序员设计的编辑器之一,其中最好的编辑器也是开源的。
重要的是,Emacs 自 1983 年以来就一直存在。虽然年龄绝不意味着质量或增长,但 Emacs 从一开始就一直在持续的协作开发中。 如果你正在寻找长期稳定性,Emacs 是一个光辉的例子。 虽然自开始以来它已经发生了重大变化,但可以合理地预期 10 年或更久之前的 GNU Emacs 在功能上与最新版本相同。 有 Emacs 用户将自定义技巧放在他们的 .emacs 配置文件中,可以追溯到 90 年代中期。 我的一些配置选项是从导师那里借来的,所以我的配置早于我对 Emacs 的使用,而且它们仍然有效。
使用 Emacs,你不仅限于调整主题元素或只是编写一个很酷的插件。 当你修改你的 Emacs 配置时,你正在改变 Emacs 的运行方式以及你与它的交互方式。 你创建自己的 Emacs 体验,并且你可以根据需要尽可能长时间地保持这种体验。
以文本方式远程运行
从功能上讲,Emacs 拥有的任何东西也可能存在于现代编辑器中。 软件往往以这种方式运行:应用程序会借用并整合其前身的功能,因为这些功能被认为是基线期望。 但是,Emacs 有一件事很难被击败:它能够在终端中以纯文本界面运行而不会丢失任何功能。
Emacs 的核心是一个 Lisp 解释器。 你可以把它想象成 Python IDLE,但它是 Lisp 的一种方言而不是 Python。 它可以作为终端中的文本界面运行,也可以作为带有 GTK、Aqua、Lucid 或其他图形界面的 GUI 界面运行,或者作为另一个 Emacs 会话中的客户端运行。 虽然你可能无法使用某些依赖于图形服务器的特殊功能(例如,将 PDF 作为图形文件打开在单独的终端中不受支持),所有核心功能和大多数扩展程序的操作方式与使用 GUI 时相同。
无遥测
并非所有文本编辑器都会跟踪你,但有些编辑器会。 有些编辑器不仅会记录你最初下载产品的信息,还会主动跟踪你的使用情况,无论你是否知道。 正是出于这个原因,才有了像 VSCodium 这样的项目:帮助你编译几乎不包含任何跟踪软件的编辑器。 不幸的是,编译编辑器的“非官方”版本(以至于可以将一个真正的开源编辑器命名为“官方”)会否定你运行某些扩展的能力,所以有时你的选择是运行赞助公司提供的二进制文件,或者运行功能减少的编辑器。
GNU Emacs 帮助推广的自由软件许可证的保证是,这种情况不会发生。 你自己编译的 GNU Emacs 可以与 GNU 或发行版存储库提供的二进制文件完全相同。 事实上,自己编译有时甚至更好,因为你可以调整构建方式以满足你的特定需求,但你永远不必不情愿地放弃功能。
破解代码,而不是 API
开源意味着你可以破解代码,无论如何。 但是,破解编辑器和进行 API 调用之间存在很大的差异。 对于许多现代文本编辑器,当它们宣传自己是“可破解”甚至“可扩展”时,它们实际上指的是核心开发人员提供的 API。 这绝不是一个问题,但这与修改引擎本身的代码不同。 使用 Emacs,当你为你的编辑环境编写 Lisp 修改时,无论只是你的 .emacs 配置文件中的单行代码,还是你提供给数千名其他用户的花哨插件,你都在重新编程你正在运行的内容。
有时,抽象是一件好事。 通过实现 API,开发人员可以提供许多入口点来扩展他们的产品,例如为同一个编辑器提供 JavaScript、Python 和 Ruby 接口。 另一方面,API 就是 API,这意味着你只能使用提供的内容。 如果 API 开发人员没有预料到你想访问某些数据对象,那么你就无法访问该数据对象,除非你破解 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 条评论