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 键,并且因为它们总是与 accompanying 字母或符号键配对,所以它们在文档中很容易识别。

例如,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 mentally 翻译成 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 年以来——但它的持续开发使其在今天仍然具有现实意义。

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,而 Menu 键是 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.