为什么我热爱 Emacs

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

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

Tetris in Emacs

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

Elisp(以及扩展的 Common Lisp)对于习惯使用 Bash 或 Python 或类似语言的人来说,不一定是最好的入门语言。 但是 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 模式比较两个不同位置的文件(我不喜欢这个术语,但这就是它的叫法)。

自从我的教授让我在学校使用 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 (Text Editor and COrrector) 和一个基于行的编辑器 SOS (Son of Stopgap)。嗯,我们的系统程序员找到了这个新奇的基于屏幕的编辑器并安装了它:FINE (Fine is Not Emacs)。我不知道这意味着什么,只知道它是一个很棒的编辑器。快进几个操作系统到 Linux,瞧,我看到了 emacs 这个名字...... 并发现了一个老朋友的父母在那里迎接我。

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

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

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

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

回复 作者 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.