我为什么热爱 Emacs

Emacs 不仅仅是一个文本编辑器;它让你掌控一切,并允许你解决遇到的几乎任何问题。
190 位读者喜欢这篇文章。

我是一个习惯性的 Emacs 用户。不是我选择了 Emacs,而是它选择了我。 当我第一次学习 Unix 时,我偶然发现了一个鲜为人知的功能,在一个名为 Emacs 的奇怪应用程序中,它显然隐藏在我的计算机上。 传说(并且已被证实)如果你在终端输入 emacs,按下 Alt+X,然后输入 tetris,你就可以玩一个俄罗斯方块游戏。

Tetris in Emacs

这就是我对 GNU Emacs 的介绍。虽然它有点轻浮,但也准确地表明了 Emacs 的本质——用户可以重新编程他们的(虚拟)世界,并使用应用程序做任何他们想做的事情。每天在你的文本编辑器中玩俄罗斯方块可能不是你的主要目标,但它表明 Emacs 自豪地是一个编程平台。 实际上,你可以把它看作是 Jupyter 的一种前身,它将一种强大的编程语言(准确地说是 elisp)与其自身的实时环境相结合。 因此,Emacs 作为一个文本编辑器,是灵活的、可定制的和强大的。

如果您习惯于 Bash 或 Python 或类似的语言,Elisp(以及 Common Lisp,可以引申一下)不一定是开始使用的最简单的语言。 但是 LISP 方言非常强大,并且因为 Emacs 是一个 LISP 解释器,所以你可以构建应用程序,无论是 Emacs 插件还是你想开发成独立项目的原型。 广受欢迎的 org-mode 项目 只是一个例子:它是一个 Emacs 插件,也是一个带有移动应用程序的 markdown 语法,用于解释和扩展其功能。 还有许多类似的 Emacs 内部有用应用程序的例子,包括电子邮件客户端、PDF 查看器、Web 浏览器、shell 和文件管理器。

两种界面

GNU Emacs 至少有两种用户界面:图形用户界面 (GUI) 和终端用户界面 (TUI)。 这有时会让人们感到惊讶,因为 Emacs 经常与 Vi 进行比较,Vi 在终端中运行(尽管 gVim 为现代 Vi 实现提供了 GUI)。 如果你想将 GNU Emacs 作为终端应用程序运行,你可以使用 -nw 选项启动它

$ emacs -nw

使用 GUI,你可以直接从你的应用程序菜单或终端启动 Emacs。

你可能会认为 GUI 会降低 Emacs 的效率,仿佛“真正的文本编辑器在终端中运行”,但 GUI 可以让 Emacs 更容易学习,因为它的 GUI 遵循一些典型的约定(菜单栏、可调整的小部件、鼠标交互等等)。

实际上,如果你将 Emacs 作为 GUI 应用程序运行,你可能可以在一天中根本没有注意到你在 Emacs 中。 只要你使用 GUI,大多数常见的约定都适用。 例如,你可以用鼠标选择文本,导航到 编辑 菜单,选择 复制,然后将光标放在其他位置并选择 粘贴。 要保存文档,你可以转到 文件保存另存为。 你可以按 Ctrl 并向上滚动以使屏幕字体更大,你可以使用滚动条在文档中导航,等等。

以 GUI 形式了解 Emacs 是平滑学习曲线的好方法。

Emacs 键盘快捷键

GNU Emacs 以其复杂的键盘组合而臭名昭著。 它们不仅不熟悉(Alt+W 复制? Ctrl+Y 粘贴?),而且还用神秘的术语来表示(“Alt”被称为“Meta”),有时它们成对出现(Ctrl+X 之后是 Ctrl+S 保存),有时单独出现(Ctrl+S 搜索)。 为什么会有人故意选择使用这个?

好吧,有些人不会。 但是那些这样做的都是这些组合如何轻松地融入日常打字的节奏的粉丝(并且通常将 Caps Lock 键用作 Ctrl 键)。 然而,那些喜欢不同东西的人有几种选择。

  • evil 模式允许你在 Emacs 中使用 Vim 键绑定。 就这么简单:你可以保留你已经记忆的按键组合,并且继承了可用的最强大的文本编辑器。
  • 通用用户访问 (CUA) 键保留了所有常用的 Emacs 键组合,但最令人不悦的那些——复制、剪切、粘贴和撤消——都映射到它们的现代绑定(分别是 Ctrl+CCtrl+XCtrl+VCtrl+Z)。
  • global-set-key 函数是 Emacs 编程的一部分,允许你定义自己的键盘快捷键。 传统上,用户定义的快捷键以 Ctrl+C 开头,但没有什么能阻止你发明自己的方案。 Emacs 并不珍视自己的身份。 欢迎你按照自己的意愿来改造它。

学习 Emacs

精通 Emacs 需要时间。 对我来说,这意味着打印出 速查表 并每天都放在我的键盘旁边。 当我忘记一个按键组合时,我在我的速查表上查找它。 如果它不在我的速查表上,我学习了键盘组合,要么通过执行该功能并注意到 Emacs 如何告诉我如何更快地访问它,要么通过使用 describe-function

M-x describe-function: save-buffer

save-buffer is an interactive compiled Lisp function in ‘files.el’.

It is bound to C-x C-s, <menu-bar> <file> <save-buffer>.
[...]

在使用它的过程中,你学习它。 而且你对它了解得越多,你就越有能力改进它并使其成为你自己的。

尝试 Emacs

一个常见的笑话是说 Emacs 是一个包含文本编辑器的操作系统。 也许这意味着 Emacs 臃肿且过于复杂,并且肯定有一种说法是,根据其默认配置,文本编辑器不应需要 libpoppler(你可以编译不包含它的 Emacs)。

但是这个笑话背后隐藏着一个更大的真相,它揭示了 Emacs 如此有趣的原因。 将 Emacs 与其他文本编辑器(如 Vim、Nano 甚至 VSCodium)进行比较是没有意义的,因为 Emacs 真正重要的部分不是你可以在窗口中输入内容并保存它的想法。 这是即使 Bash 也提供的基本功能。 Emacs 的真正意义在于它如何让你掌控一切,以及如何通过 Emacs Lisp (Elisp) 解决几乎任何问题。

接下来阅读什么
Seth Kenlon
Seth Kenlon 是一名 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。 他曾在电影和计算机行业工作,通常同时进行。

13 条评论

对我来说,关于 Emacs 最令人着迷的事情是(并且仍然是)你可以将它扩展到各种用例和情况。 学习曲线有时非常高,但是当一个包工作时,Emacs 是一个不会妨碍你的助手。 如果一切都失败了,只需输入 M-x doctor,一切都会变得更容易 ;-)

Emacs 作为用户通过文本终端界面远程登录的窗口界面也非常好。 你可以在 Emacs 缓冲区中启动 shell,并在它们和文档缓冲区之间复制/粘贴文本。

当我在大学里并且我通过 80x24 文本终端(无论是硬连线还是拨号)访问大学的 VAX 时,这确实是一件大事。

我也认为“Gnus”新闻阅读器(随大多数 Emacs 版本一起提供)是有史以来最好的 NNTP 新闻阅读器。

关于 Emacs 是“包含文本编辑器的操作系统”的笑话与其说是一种抱怨,不如说是指它得益于令人难以置信的强大的 LISP 编程环境而成为一个非常好的应用程序平台。

> Emacs 作为用户通过文本终端界面远程登录的窗口界面也非常好。

我同意。 即使在今天基于 GUI 的 IDE 的世界中,当你在远程支持客户端时,也经常只有终端。 我可以使用 eshell 对问题进行故障排除,同时查看配置或源代码,或者使用 TRAMP 模式比较来自两个不同位置的文件(我不喜欢这个术语,但这就是它的称呼)。

自从我的教授在学校(如果我没记错的话,是18版本)让我使用 Emacs 以来,我就一直是 Emacs 用户。

回复 ,作者是 David C.

在新西兰,“tramp”一词的意思是“徒步旅行”——也就是说,为了休闲目的,在自然环境中进行长途步行。人们可能会在周末“go for a tramp”或“go tramping”。Emacs 中的这个术语似乎非常合适,至少在当地是这样!

回复 ,作者是 Papo Anaya

说得好。我觉得一旦人们发现了 dired-mode,它就可以改变游戏规则。当我发现 dired-mode 和 shell 时,我基本上就再也没有关闭过 Emacs 了……永远。

回复 ,作者是 David C.

我有一个有趣的小故事:在我听说 Unix 之前,更不用说使用它了,在 Digital Equipment Corporation 的 DECsystem-10 上,运行着一个非常不像 Unix 的操作系统 TOPS-10,当时它有两个编辑器:一个基于字符的编辑器,TECO (文本编辑器和校正器),和一个基于行的编辑器,SOS (Stopgap 之子)。好吧,我们的系统程序员发现这个新颖的基于屏幕的编辑器并安装了它:FINE (Fine is Not Emacs)。我不知道这意味着什么,只知道它是一个很棒的编辑器。快进经过几个操作系统到 Linux,天啊,我看到了 emacs 这个名字……并找到了一个老朋友的父辈来迎接我。

啊,TECO!臭名昭著的纸带编辑器。

Emacs 最初是 “Editing MACroS” 的缩写,第一个版本是用 TECO 编写的。

在我还在 Multics 上工作的时候,我们过去常玩一个 TECO 游戏,因为它的命令大部分都是单字符,我记得:输入你的首字母/名字,看看它会做什么。

我从维基百科的文章中看到,我们并不是唯一这样做的人。

回复 ,作者是 kjcole

这对我来说是一个新游戏。我喜欢它。由于缺乏单字符命令,我的首字母与 Ctrl 组合实际上会剪切一个换行符。不是特别令人兴奋,但这就是规则。

回复 ,作者是 dgrb

Emacs 是我唯一使用的编辑器。它可以扩展许多有用的附加组件。

更好的速查表是官方 GNU Emacs 速查表。
https://gnu.ac.cn/software/emacs/refcards/pdf/refcard.pdf

考虑到主观性,我偏爱我创建的速查表。但我认为最终,“最好”的速查表是适合 $USER 的那一个。

回复 ,作者是 Rick

如果你年纪够大,其中一些按键绑定是有道理的:我从 1981 年左右开始使用 emacs。

C-W 和 Alt-W 中的 W 代表 “wipe(擦除)”,C-Y 中的 Y 代表 “yank(猛拉)”。

我从菜单中知道 “yank”,但我相信 “wipe” 对我来说是新闻。谢谢!

回复 ,作者是 dgrb

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议授权。
© . All rights reserved.