我是一个经常使用 Emacs 的人。与其说是我选择了 Emacs,不如说是它选择了我。 当我第一次学习 Unix 时,我偶然发现了一个鲜为人知的功能,它在一个名为 Emacs 的奇怪应用程序中,而 Emacs 显然隐藏在我的电脑里。 传说(后来被证实是真的)如果你在终端输入 emacs
,按 Alt+X,然后输入 tetris
,你就可以玩一个下落方块的游戏。

那是我对 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+C、Ctrl+X、Ctrl+V 和 Ctrl+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) 解决几乎任何问题。
13 条评论