跳转到内容

Emacs/Emacs 哲学

来自维基教科书,开放的书籍,开放的世界

UNIX 工具的设计者经常谈论 UNIX 哲学:“一个工具应该只做一件事,而且要做好”。UNIX 开发人员喜欢他们简洁、强大、命令行工具,他们可以以无数种方式将这些工具串联起来。

然后是 Emacs,尽管它拥有值得称道的 UNIX 根源,但它却因其庞大的自然而受到嘲笑:坐在你旁边的讽刺的 vi 用户可能会想出关于你使用 Eight-meg Memory use Constantly Swapping 操作系统(在它之上实现了一个平庸的编辑器)的陈词滥调。

然而,我认为 Emacs 确实很好地体现了 UNIX 哲学。

缺失的格言:可扩展性

[编辑 | 编辑源代码]

我认为早期的 UNIX 哲学家忘记了在他们的指南中添加一些东西。对于命令行工具来说,这太隐含了,很容易忽略,但在你使用交互式的东西时,它会变得更加明显。

他们应该说的是:“做好一件事... 而且还要是图灵完备的”

你说什么!?一个工具怎么能既只做一件事,又能做所有事呢?好吧,事情是这样的... 做好一件事很好,但你的行为并不孤立存在,你的工具必须与其他工具交互才能完成你的整体任务。

在命令行中,这很容易,如果你想让你的 grep 命令发送邮件,你只需像这样通过管道传输到邮件

grep root /etc/shadow | mail [email protected]

但是,一旦你开始以交互方式做事,事情就会变得困难。输入和输出不再是简单的字符流,而是复杂的事件交织模式。

在这个环境中,管道的模拟是应用程序脚本语言。为了真正满足 UNIX 哲学,你必须具有高度的可扩展性。因此,我们遇到了

EMACS:图灵完备的文本编辑器

[编辑 | 编辑源代码]

这就是我们理解 emacs 的方式。一个试图在 UNIX 哲学中尽可能简单,但也高度可扩展的文本编辑器。

现在,可扩展性并不是 emacs 独有的功能。许多工具都有插件框架和脚本。但 emacs 有点不同

  • 它的脚本语言 emacs lisp 易于使用,许多与编辑器的交互形式都是作为语言级功能实现的
  • 尽可能多的功能都是使用这种可扩展性语言实现的
  • 提供了许多功能来帮助你与 emacs lisp 交互,而且,日常活动鼓励你与 emacs lisp 交互。

Emacs 是一个以可扩展脚本为核心的编辑器,而不仅仅是作为插件编写者才能理解的后续想法。

华夏公益教科书