为什么我喜欢 Emacs

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

我是一个经常使用 Emacs 的人。与其说是我选择了 Emacs,不如说是它选择了我。 当我第一次学习 Unix 时,我偶然发现了一个鲜为人知的功能,它在一个名为 Emacs 的奇怪应用程序中,而 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 相提并论,后者在终端中运行(尽管 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 以来,我一直是 Emacs 用户(如果我没记错的话是 18 版)。

回复 作者: David C.

在新西兰,单词 "tramp" 意味着 "徒步旅行" -- 也就是为了休闲目的在自然环境中进行长途步行。人们可能会在周末 "go for a tramp" (去徒步旅行) 或 "go tramping" (进行徒步旅行)。 至少在本地,这个术语在 Emacs 中似乎非常合适!

回复 ,作者 Papo Anaya

我有一个有趣的小故事:在听说Unix之前,更不用说使用它了,在Digital Equipment Corporation的DECsystem-10上,运行着一个非常不像Unix的操作系统TOPS-10。当时它有两个编辑器:一个基于字符的编辑器TECO (Text Editor and COrrector,文本编辑器和校正器) 和一个基于行的编辑器SOS (Son of Stopgap,权宜之计之子)。 我们的系统程序员发现了一个新式的基于屏幕的编辑器并安装了它:FINE (Fine is Not Emacs,FINE不是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 中的 W 代表 "wipe" (擦除),C-Y 中的 Y 代表 "yank" (拽取)。

© . All rights reserved.