Emacs 入门指南

10 个技巧助你深入探索这款实用的开源文本编辑器。
112 位读者喜欢这篇文章。
How do we fix the state of technical documentation?

Victor,来自 Flickr。CC BY 2.0

许多人说他们想学习 Emacs,但许多人在短暂接触后就退缩了。这不是因为 Emacs 不好,甚至不是因为它太复杂。我认为问题在于,人们实际上并不想学习 Emacs;他们只是想适应 Emacs 的传统。他们想理解那些神秘的键盘快捷键和不熟悉的术语。他们想以他们认为“应该使用”的方式来使用 Emacs。

我理解这种感受,因为我对 Emacs 也有同样的看法。我以为所有真正的 Emacs 用户都只在终端中运行它,从不使用方向键或菜单,更不用说鼠标了。这绝对是阻止自己开始使用 Emacs 的好方法。网上有足够多的独特的 .emacs 配置文件来证明,如果 Emacs 用户之间存在一种共同的倾向,那就是每个人都以不同的方式使用 Emacs。

学习 Emacs 很容易。爱上 Emacs 才是困难的。要爱上 Emacs,你必须发现它拥有的你一直在寻找的功能,有时甚至在你没有意识到自己缺少它们的情况下。而这需要经验。

获得这种经验的唯一方法是从头开始——积极地使用 Emacs。这里有十个技巧,可以帮助你找出最适合自己的方法。

从 GUI 开始

Emacs(及其友好的竞争对手 Vim 也是如此)最棒的事情之一是它可以在终端中运行,这在你 SSH 进入服务器时很有用,但在过去 15 年左右制造的计算机上并不那么重要。GUI 版本的 Emacs 可以运行在极其低功耗设备上,并且它具有许多实用功能,新手和有经验的用户都可以欣赏。

例如,如果你不知道如何在 Emacs 中仅使用键盘快捷键复制一个单词,那么“编辑”菜单的“复制”、“剪切”和“粘贴”选项提供了阻力最小的路径。没有理由因为选择 Emacs 而惩罚自己。使用它的菜单,使用鼠标选择区域并单击缓冲区内按钮,不要让不熟悉阻碍你提高效率。

Emacs slackware

这些功能内置在 Emacs 中,因为用户会使用它们。你应该在你需要它们时使用它们,并逐步掌握你认为最终在没有 Alt 键或方向键的 VT100 终端上通过 SSH 使用 Emacs 时可能需要的那些晦涩的命令。

习惯术语

Emacs 对其 UI 元素有特殊的术语。个人计算的演变并没有建立在相同的术语之上,因此许多术语对于现代计算机用户来说相对陌生,而另一些术语则相同但含义不同。以下是一些最常见的术语

  • Frame(框架):在 Emacs 中,框架是现代计算中所称的“窗口”。
  • Buffer(缓冲区):缓冲区是 Emacs 的通信通道。它可以充当 Emacs 进程的命令行、shell 或文件的内容。
  • Window(窗口):窗口是你查看缓冲区的视图。
  • Mini-buffer(迷你缓冲区):主命令行,位于 Emacs 窗口的底部。

Emacs tutorial map

理解 Emacs 修饰键

在 PC 键盘上,Ctrl 键被称为 C,Alt 键被称为 M。这些不是 C 键和 M 键,并且由于它们总是与随附的字母或符号键配对,因此在文档中很容易识别。

例如,C-x 在现代键盘表示法中表示 Ctrl+X,而 M-x 表示 Alt+X。你像在任何应用程序中剪切文本一样同时按下这些键。

然而,还有另一个级别的键盘快捷键,与现代计算机上的任何东西都截然不同。有时,键盘快捷键不仅仅是一个按键组合,而是由一系列按键组成。

例如,C-x C-f 表示像往常一样按下 Ctrl+X,然后像往常一样按下 Ctrl+F。

有时,键盘快捷键混合了按键类型。组合键 C-x 3 表示像往常一样按下 Ctrl+X,然后按下数字 3 键。

Emacs 可以执行这些花哨的强大组合,是因为某些键使 Emacs 进入特殊的命令模式。如果你按下 C-X(即 Ctrl+X),你就告诉 Emacs 进入空闲状态,等待第二个键或键盘快捷键。

Emacs 文档,无论是官方的还是非官方的,都充满了键盘快捷键。练习将 C 在脑海中翻译成 Ctrl,将 M 翻译成 Alt,所有这些文档对你来说都会更有意义。

剪切、复制和粘贴的替代快捷键

规范上,复制文本是通过一系列键盘快捷键执行的,这些快捷键取决于你想如何复制或剪切。

例如,你可以用 M-d(Emacs 术语中的 Alt+d)剪切整个单词,或者用 C-k(Ctrl+K)剪切整行,或者用 M-m(Alt+M)剪切高亮区域。如果你愿意,你可以习惯这种方式,但如果你喜欢 Ctrl+C、Ctrl+X 和 Ctrl-V,那么你可以改用这些快捷键。

启用现代剪切-复制-粘贴需要激活一个名为 CUA(通用用户访问)的功能。要激活 CUA,请单击“选项”菜单并选择“使用 CUA 键”。启用此功能后,C-c 复制高亮文本,C-x 剪切高亮文本,C-v 粘贴文本。此模式实际上仅在你选择文本时才处于活动状态,因此你仍然可以学习 Emacs 通常使用的常用 C-x 和 C-c 绑定。

分享是可以的

Emacs 只是一个应用程序,它不会感知你的感受或忠诚度。如果你只想将 Emacs 用于“感觉”适合 Emacs 的任务,而将不同的编辑器(如 Vim)用于其他任务,你可以这样做。

你与应用程序的交互会影响你的工作方式,因此,如果 Emacs 中所需的按键模式与特定任务不一致,那么不要强迫自己使用 Emacs 来完成该任务。Emacs 只是你可以使用的众多开源工具之一,没有理由将自己限制为仅使用一种工具。

探索新功能

Emacs 所做的大部分工作都是 elisp 函数,可以通过菜单选择、键盘快捷键或在某些情况下通过特定事件来调用。所有函数都可以从迷你缓冲区(Emacs 框架底部的命令行)执行。理论上,你甚至可以通过键入诸如 forward-wordbackward-wordnext-lineprevious-line 等函数来导航光标,等等。这将极其低效,但这正是你可以直接访问正在运行的代码的方式。在某种程度上,Emacs 本身就是一个 API。

你可以通过阅读社区博客上关于 Emacs 的文章来了解新功能,或者你可以采取更直接的方法并使用 describe-function 函数。要获取有关任何函数的帮助,请按 M-x(即 Alt+X),然后键入 describe-function,然后按 Return 或 Enter 键。系统会提示你输入函数名称,然后显示该函数的描述。

你可以通过键入 M-x(Alt+X),后跟 ? 来获取所有可用函数的列表。

你还可以在键入函数时获得函数的弹出描述,方法是按 M-x,然后键入 auto-complete-mode,然后按 Return 或 Enter 键。在此模式激活后,当你将任何 Emacs 函数键入到文档中时,系统会提供自动完成选项以及函数描述。

Emacs function

当你找到一个有用的函数并使用它时,Emacs 会告诉你它的键盘绑定(如果已设置)。如果不存在键盘绑定,你可以通过打开你的 $HOME/.emacs 配置文件并输入键盘快捷键分配来自己分配一个。语法是 global-set-key,后跟你要使用的键盘快捷键,后跟你要调用的函数。

例如,要将 screenwriter-slugline 函数分配给键盘绑定

(global-set-key (kbd “C-c s”) 'screenwriter-slugline)

重新加载你的配置文件,键盘快捷键即可供你使用

M-x load-file ~/.emacs

紧急按钮

当你使用 Emacs 并尝试新功能时,你肯定会开始调用一些你不想调用的东西。Emacs 中的通用紧急按钮是 C-g(即 Ctrl+G)。

我通过将 G 与 GNU 联系起来记住这一点,我仿佛在呼唤 GNU 来拯救我于一个糟糕的决定,但你可以随意编造自己的助记符。

如果你按几次 C-g,Emacs 迷你缓冲区将返回到潜在状态,弹出窗口将被隐藏,你将回到一个普通的、无聊的文本编辑器的安全状态。

忽略键盘快捷键

潜在的键盘快捷键太多了,无法在此处全部总结,更不用说让你希望记住所有快捷键了。这是故意的。Emacs 旨在进行自定义,当人们为 Emacs 编写插件时,他们可以定义自己的特殊键盘快捷键。

目的不是立即记住所有快捷键。相反,你的目标是让自己习惯使用 Emacs。你在 Emacs 中变得越舒适,你就越会厌倦一直求助于菜单栏,并且你将开始记住对你重要的组合键。

每个人都有自己喜欢的快捷键,这取决于他们在 Emacs 中通常做什么。整天在 Emacs 中编写代码的人可能知道运行调试器或启动特定于语言的模式的所有键盘快捷键,但对 Org-mode 或 Artist-mode 一无所知。这很自然,而且没关系。

在使用 Bash 时练习 Emacs

了解 Emacs 键盘快捷键的一个好处是,其中许多快捷键也适用于 Bash

  • C-a—转到行首
  • C-e—转到行尾
  • C-k—剪切整行
  • M-f—向前移动一个单词
  • M-b—向后移动一个单词
  • M-d—剪切一个单词
  • C-y—拽回(粘贴)最近剪切的内容
  • M-Shift-U—将单词首字母大写
  • C-t—交换两个字符(例如,sl 变为 ls)

还有更多示例,它可以使你与 Bash 终端的交互比你想象的更快。

软件包

Emacs 有一个内置的软件包管理器,可以帮助你发现新的插件。它的软件包管理器包含帮助你编辑特定类型文本的模式(例如,如果你经常编辑 JSON 文件,你可能会尝试 ejson-mode)、嵌入式应用程序、主题、拼写检查选项、linter 等。这就是 Emacs 有潜力成为你日常计算的关键所在;一旦你找到一个很棒的 Emacs 软件包,你可能就离不开它了。

Emacs emoji

你可以通过按 M-x(即 Alt+X),然后键入 package-list-packages 命令,然后按 Return 或 Enter 键来浏览软件包。软件包管理器每次启动时都会更新其缓存,因此第一次使用时请耐心等待它下载可用软件包列表。加载后,你可以使用键盘或鼠标导航(记住,Emacs 是一个 GUI 应用程序)。每个软件包名称都是一个按钮,因此将光标移动到其上方并按 Return 键,或者直接用鼠标单击它。你可以在 Emacs 框架的新窗口中阅读有关软件包的信息,然后使用“安装”按钮安装它。

有些软件包需要特殊配置,有时会在其描述中列出,但有时需要你访问软件包的主页以阅读更多相关信息。例如,自动完成软件包 ac-emoji 很容易安装,但需要你定义一个符号字体。它可以正常工作,但只有在你安装了字体后才能看到相应的表情符号,除非你访问其主页,否则你可能不知道这一点。

俄罗斯方块

信不信由你,Emacs 也有游戏。有数独、测验、扫雷、一个纯粹为了好玩的心理治疗师,甚至还有俄罗斯方块。这些都不是特别有用,但与 Emacs 进行任何级别的交互都是很好的练习,而游戏是最大化你在 Emacs 中花费的时间的好方法。

Emacs tetris

俄罗斯方块也是我最初接触 Emacs 的方式,因此在所有版本的游戏中,Emacs 版本真的是我的最爱。

使用 Emacs

GNU Emacs 之所以受欢迎,是因为它非常灵活且高度可扩展。人们非常习惯 Emacs 键盘快捷键,以至于他们习惯性地尝试在所有其他应用程序中使用它们,并且他们将应用程序构建到 Emacs 中,因此他们永远不必离开它。如果你希望 Emacs 在你的计算生活中发挥重要作用,那么最终的关键是拥抱未知并开始使用 Emacs。跌跌撞撞地摸索,直到你发现如何让它为你工作,然后安顿下来享受 40 年的舒适体验。

接下来阅读什么

谁在乎 Emacs?

GNU Emacs 已经存在很长时间了——自 1983 年以来——但它的持续开发使其在今天仍然具有现实意义。

(团队成员, 红帽)
2020 年 2 月 24 日
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,通常同时进行。

4 条评论

在我的系统上,“Alt”键不是 M- 前缀。Alt 是 A- 前缀。“Meta”是 M- 前缀。当在带有 PC 类型键盘的系统上运行时,为了方便起见,Alt 被映射到 Meta,因为 PC 键盘没有 Meta 键。

在其他系统上,可能会有所不同。例如,在较旧的 Sun 系统上,有一些带有空心菱形符号的修饰键,这些键通常映射到 Meta,从而允许 Alt 键生成 A- 按键。

此外,这些映射是站点可配置的。即使在 PC 硬件上的 Linux 上,它们的配置也可能不同。

总的来说,我发现教导只有 Meta 映射在所有平台上始终可用是很有帮助的——即 ESC 键。如果你在文档中看到 M-x,那么在某些平台上可能是 Alt-x。在其他平台上,它可能是专门的 Meta-x 按键。但在所有系统上,你都可以键入 ESC,后跟“x”以获得相同的效果。

更令人困惑的是,Emacs 还支持另外两个修饰键。Super (S-) 和 Hyper (H-) 默认情况下通常没有分配给它们的功能,但你可以将它们用于自己的宏。大多数键盘没有 Super 和 Hyper 键,但某些安装会创建映射。例如,我见过一些安装,其中“Windows”键是 Super,而菜单键是 Hyper。

当然,对于初学者教程来说,没有必要解释所有这些,但你真的应该指出 Alt- 和 Meta- 之间的区别。即使它们现在默认相互映射,但它们并不总是如此,如果用户不知道发生了什么,由此产生的混乱可能会是致命的。

我做了一个小的修改(“在 PC 键盘上...”)来捕捉这个技术细节。因为这种概括适用于“大多数”用户(我意识到我没有数据来支持“大多数”的说法),所以我不会在入门文章中提及 Alt 和 Meta 之间的区别。它只会使我想传达的基本原理变得混乱,而且我不认为这通常是一个问题。

我可能会被说服。你使用什么键盘不将 Meta 映射到 Alt?还是这是你有意做的更改?当从 Vim 切换到 Emacs 时,我为了舒适起见使用了 ESC,但最终迁移到了 Alt。

回复 作者:David C.

好文章!

> 例如,C-x C-f 表示像往常一样按下 Ctrl+X,然后像往常一样按下 Ctrl+C。

笔误:Ctrl-C → Ctrl-F (或 C-f → C-c :-))

谢谢,Adam。我讨厌为清晰而设计的东西中出现愚蠢的错误!无论如何,现在已修复。

回复 作者:Adam S (未验证)

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