我为什么喜欢 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 查看器、网络浏览器、shell 和文件管理器。

两种界面

GNU Emacs 至少有两个用户界面:图形用户界面 (GUI) 和终端用户界面 (TUI)。 这有时会让人们感到惊讶,因为 Emacs 经常与 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,并在它们和文档缓冲区之间复制/粘贴文本。

当我在大学时,我的访问大学 VAX 的方式是通过 80x24 文本终端(无论是硬线还是拨号),这真的很重要。

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

关于 Emacs 的笑话,说它是“包含文本编辑器的操作系统”,与其说是抱怨,不如说是指它作为一个非常强大的应用程序平台,这要归功于它极其健壮的 LISP 编程环境。

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

我同意。即使在今天基于 GUI 的 IDE 世界中,仍然有很多时候你在远程支持客户时只有终端。我可以使用 eshell 查看配置或源代码来排除故障,或者使用 TRAMP 模式比较来自两个不同位置的文件(我不喜欢这个术语,但它就是这么叫的)。

自从我的教授在学校让我使用 Emacs(如果我没记错的话是 18 版本)以来,我就一直是 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

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