Emacs编辑器:Linux系统下的高效文本编辑指南

简介

Emacs 是最古老且功能最强大的文本编辑器之一。GNU Emacs 版本最初于1984年编写,并以其强大且丰富的编辑功能而闻名。它可以通过不同的模式进行定制和扩展,使其可以像集成开发环境(IDE)一样用于编程语言,如 Java、C 和 Python。

对于那些既使用过 Vi 又使用过用户友好型 Nano 文本编辑器的人来说,Emacs 可以看作是两者之间的一种选择。它的优势和功能类似于 Vi,而其菜单、帮助文件和命令键则类似于 Nano。

在本文中,你将学习如何在 Ubuntu 22.04 服务器上安装 Emacs,并将其用于基本文本编辑。

先决条件

为了跟随本教程,您需要一个设置了 sudo 特权和启用了防火墙的非 root 用户的 Ubuntu 22.04 服务器。您可以按照我们的《使用 Ubuntu 22.04 初期服务器设置指南》进行设置。

第一步 – 安装 Emacs

首先,检查您的系统上是否已经安装了 Emacs。

  1. emacs

如果程序已安装,编辑器将会启动并显示默认的欢迎信息。如果没有安装,则会收到以下输出:

Output
Command 'emacs' not found, but can be installed with: sudo apt install e3 # version 1:2.82+dfsg-2 sudo apt install emacs-gtk # version 1:27.1+1-3ubuntu5 sudo apt install emacs-lucid # version 1:27.1+1-3ubuntu5 sudo apt install emacs-nox # version 1:27.1+1-3ubuntu5 sudo apt install jove # version 4.17.3.6-2 See 'snap info emacs' for additional versions.

安装 Emacs,请使用以下命令:

  1. sudo apt install emacs

安装了 Emacs 后,你就可以继续进行下一步。

第二步 – 使用界面

在终端中输入命令“emacs”来启动 Emacs。

  1. emacs

Emacs 以一个空白的编辑缓冲区开始,并等待您开始输入。当您启动 Emacs 时,如果没有指定文件,程序将显示一个欢迎消息。

Emacs welcome message

要开始一个新文件,将光标移到“访问新文件”链接上,按下 TAB 键然后按下 ENTER。你也可以按下 CTRL+X,然后按下 CTRL+F 来新建一个文件。在你的终端末尾会出现一个提示,要求输入文件名。

A prompt appears at the bottom of the Emacs window asking for a file name.

输入一个文件名开始进行文本编辑。在以下示例中,使用了 myfile.txt。您可以随意命名这个文件。输入文件名后,按下回车键继续。

一个空文件将准备好进行文本输入。

Empty file appears after entering a file name.

屏幕顶端有一个菜单。菜单下方是一个大的编辑空间。这被称为主缓冲区,您可以在此输入文本或查看文件内容。

当 Emacs 编辑磁盘上的现有文件时,该文档的副本首先被加载到内存中,然后在主编辑窗口中显示出来。这个内存区域被称为缓冲区。当您在文档中工作时,您所做的所有更改都将应用到缓冲区,而磁盘上的原始文件保持不变。偶尔,Emacs 会在后台自动保存,但只有当您手动保存文档时,更改才会写入磁盘。对于新文件也是如此。在保存之前,所有更改都是在缓冲区上进行的。Emacs 中的主编辑空间是您对缓冲区的视图。

在主缓冲区之后,屏幕底部会显示一栏突出的文字。这被称为状态栏或模式栏。这里显示的文字取决于 Emacs 当前所处的模式。除其他内容外,状态栏还包括:

  • 当前文件名
  • 当前光标位置
  • 当前编辑模式
  • 文件的状态(– 表示未修改文件,** 表示有未保存更改的文件,%% 表示只读文件)

最后,在状态栏结束的地方之后存在一行空间。在这个例子中,它显示了文本“(新文件)”。这个区域被称为迷你缓冲区。Emacs 是一个命令驱动的工具,迷你缓冲区是你的主要交互点。在这里,Emacs 会提示你输入命令,并显示输出结果。

Emacs 的文本版本和其图形用户界面(GUI)版本对待窗口的方式不同。与 GUI 应用程序不同,文本版本的 Emacs 窗口不会弹出,因为它们在终端或控制台会话中无法实现物理弹出。当 Emacs 需要启动一个新窗口时,它的主缓冲区会被分成两部分,就像在浏览器中有两个框架一样。上半部分显示主缓冲区的内容,下半部分显示新的内容。例如,当你访问 Emacs 的帮助文件或教程时,Emacs 会生成一个新窗口。

访问菜单

Emacs 启动时通常会占用整个屏幕。位于屏幕顶部的菜单栏提供大部分功能的访问方式。

与基于图形用户界面的程序不同,文本菜单不能通过鼠标点击来下拉。事实上,您也不能使用快捷键来高亮和滚动浏览菜单。

要访问菜单,请按下 F10 键。这将在主缓冲区下方打开一个新窗口,并显示一系列用于访问菜单项的键。迷你缓冲区会提示你输入所需的键。一旦你按下该键,新窗口的内容将改变,显示下一层的选项。

无论你在菜单的深度中有多深,只需按下 ESC 键三次即可退出菜单。这通常会关闭菜单窗口并带你回到主缓冲区。

这里有一些从“工具”菜单中可用的选项:

  • 日历
  • 简单计算器
  • 可编程计算器
  • 搜索目录
  • 加密和解密文档
  • 发送和读取电子邮件
  • 使用 grep 搜索文件
  • 拼写检查
  • 运行 shell 命令和编译代码
  • 版本控制
  • 比较和合并文件
  • 游戏

访问帮助与教程

Emacs 拥有一个包含了很多帮助和教程的系统。要访问它,你可以通过按下 F10 键,然后使用右箭头或左箭头来选择菜单中的“帮助”,或者按下 CTRL+H,然后再按一个相应的键。例如,在按下 CTRL+H 后,你可以输入以下任意一个键来查看常见问题、教程、新闻以及其他主题:

  • t 进入 Emacs 教程
  • CTRL+F 查看常见问题 (FAQ)
  • CTRL+P 了解已知错误和问题
  • CTRL+R 阅读 Emacs 手册
  • CTRL+E 查找额外软件包

第三步 – 使用命令键

现在你熟悉了用户界面,你可以开始熟悉 Emacs 的命令键了。当你打开一个文件时,你可以同时开始输入和发出命令。

命令功能通常涉及两个或三个按键。最常见的是 CTRL 键,其次是 ALT 键或 ESC 键。在 Emacs 环境中,CTRL 以简写形式表示为“C”。类似于 Emacs 内的 C-x C-c 的注释意味着您同时按下 CTRL + X 键,然后再按下 CTRL + C 键。同样地,C-h t 表示同时按下 CTRL + H 键,然后释放两个键再按 t 键。

在 Emacs 中,ALT 和 ESC 键被称为元键。在苹果机器上,使用 OPTION 键代替 ALT 键。其他键盘使用 EDIT 键。与 CTRL 键类似,Emacs 使用元键进行多键功能。例如,M-x 这样的符号意味着你同时按下 ALT 或 OPTION 和 x 键。同样,你也可以使用 ESC+X 来完成相同的命令。

在 Emacs 中,ENTER 键被表示为 RET,缩写为回车。ESC 键通常被表示为 E。

按下 ESC 键可以退出命令或提示。例如,你可以多次按 ESC 键来退出特定的菜单。另一种取消操作的方法是按下 CTRL+G 键。

保存并退出

当您对文档进行了一些更改或编写了一些文字后,您可以按下 CTRL + X,然后按下 CTRL + S 进行保存。迷你缓冲区将输出以下消息:

Output
Wrote /home/sammy/myfile.txt

你可以通过按下 CTRL+X,然后再按下 CTRL+C 来退出 Emacs。

如果在退出之前没有手动保存文件,你将收到此消息。

输出保存文件 /home/sammy/myfile.txt? (y, n, !, ., q, C-r, C-f, d 或 C-h)

按下 Y 键保存文件。

如果你按下 N 表示不同意,你将收到以下消息:

输出存在未保存的缓冲区;确定要退出吗? (yes 或 no)

输入“yes”以不保存退出。

导航文本

在 Emacs 中,浏览长篇文档或帮助主题可能是一项繁琐的任务。幸运的是,Emacs 提供了多种浏览文件的方式。

以下是一些常见的导航功能列表:

功能 按键
移动到下一行 CTRL+N (N 代表 Next)
移动到上一行 CTRL+P (P 代表 Previous)
向前移动一个字符 CTRL+F (F 代表 Forward)
向后移动一个字符 CTRL+B (B 代表 Backward)
向前移动一个单词 META+F (F 代表 Forward)
向后移动一个单词 META+B (B 代表 Backward)
移动到行首 CTRL+A
移动到行尾 CTRL+E (E 代表 End)
移动到句首 META+A
移动到句尾 META+E (E 代表 End)
向下翻页 CTRL+V (或 PgDn)
向上翻页 META+V (或 PgUp)
移动到文件开头 META+< (Alt + Shift + “<”)
移动到文件末尾 META+> (Alt + Shift + “>”)

请记住,META 键可以使用以下任意一个键:ALTESCOPTIONEDIT

步骤 4 – 编辑功能

如果您需要执行更多在流行文字处理软件中常见的专门任务,比如选择或突出显示特定的文本文件部分,您可以在 Emacs 中完成。

标记文本区域

按照以下步骤标记一个文本区域:

  • 将光标移动到您希望选择开始的位置。您可以使用前面描述的任何方法来移动光标。
  • 按下 CTRL+SPACEBARCTRL+@ 来设置标记以开始文本高亮。迷你缓冲区将显示“Mark Activated”(标记已激活)状态消息。
  • 将光标移动到您希望区域结束的位置。通过使用前面描述的任何按键组合。
  • 文本将高亮显示到光标当前所在的位置。
  • 再次按下 CTRL+SPACEBARCTRL+@ 以取消标记高亮文本。迷你缓冲区将显示“Mark Deactivated”(标记已取消激活)状态消息。

或者,就像一个文字处理软件那样,你可以按住 SHIFT 键,并使用键盘上的上下箭头键来移动光标,以进行选择。

如果你想选择光标当前所在的段落,请按下 META+H 键。之后连续按下 META+H 键将选择文本文件中的下一段落。

如果您想选择主缓冲区的所有内容(即“全选”),请按 Ctrl+X 然后按 h

剪切、复制和粘贴文本

类似于文字处理器,你可以复制、剪切和粘贴文本。

  • 要复制您选择的文本,请按下 META+W
  • 要剪切文本选择,请按下 CTRL-W
  • 要粘贴文本选择,请按下 CTRL-Y

删除文本

使用退格键和删除键删除文本的方式与您预期的一样。

想要快速删除整个词汇,只需要将光标移至词汇开头,然后按下 META+D。若想删除多个词汇,按住 META 键并连续按下 D。词汇将会逐个被删除。

要删除整行文本,将光标定位到您要删除的位置,然后按下 Ctrl+K。这样会删除整行文本,直到行尾为止。

按下 META+K 可以删除一句话。请注意,如果句号后没有两个空格,Emacs 将删除整行或更多内容。句号后的两个空格是 Emacs 确定句子是否跨越多行的标志。

撤销和重做

按下 CTRL+X 然后按 u 可以撤销上一次操作。另一种替代的按键组合是 CTRL+_(这里的按键是 CTRL, SHIFT- 来进行下划线操作)。

要重新做你上次的撤销操作,请按下 CTRL+G,接着按下 CTRL+下划线键

搜索和替换文本

在 Emacs 中有两个搜索方向:向前和向后。在向前搜索中,将从当前光标位置向前搜索您指定的单词。而对于向后搜索,则相反。

  • 按下 CTRL+S 进行向前搜索。然后在迷你缓冲区提示符中输入您要搜索的文本。
  • 按下 CTRL+R 进行向后搜索。

当你输入搜索词后,Emacs 会立即搜索并在主缓冲区中突显所有匹配项。

例如,在文本文件中搜索“猫”这个词将会将主缓冲区中的每个出现都显示为突出显示的文字。

在迷你缓冲区中输入搜索词“cat”进行向前搜索后,单词“cat”被高亮显示。

更换文本时,请按照以下步骤进行:

  • 按下 META+%。迷你缓冲区将提示“Query replace:”(查询替换:)以供搜索文本。
  • 输入您要替换的文本并按下 ENTER
  • 迷你缓冲区将显示“Query replace your_search_term with:”(查询替换 your_search_term 为:)。
  • 输入您要替换 your_search_term 的单词或短语,然后按下 ENTER
  • 每个匹配项都将被高亮显示,并且您将收到替换提示。迷你缓冲区将询问“Query replacing your_search_word with your_replacement_word: (C-h for help)”(查询替换 your_search_word 为 your_replacement_word: (C-h 获取帮助))。
  • 按下 y 替换当前找到的匹配项。
  • 按下 n 跳过到下一个匹配项。
  • 按下 q 退出而不进行任何替换。
  • 按下 ! 进行全局替换而不进行任何提示。迷你缓冲区将输出此消息:“replaced number occurrences.”(已替换 number 处)。

加入左对齐、右对齐和居中对齐

要使一行居中,将光标移动到该行开头处,然后按下 META+O,再按下 META+S

为了证明所选择的文本区域,请按照以下步骤进行:

  • 高亮显示您希望对齐的文本。
  • 按下 META+X。迷你缓冲区将等待响应。
  • 输入 set-justification- 并按下 TAB 键。
  • 您将看到以下补全选项:set-justification-centerset-justification-leftset-justification-rightset-justification-noneset-justification-full
  • 通过选择 set-justification-right 或您选择的任何一个选项来完成对齐命令,然后按下 ENTER
  • 选定的文本将按照您选择的方向进行对齐。

以下是分别针对不同对齐设置指定的文本示例:

Emacs中选择文本的示例。第一部分显示文本已被选中。第二部分显示文本右对齐。下一部分是左对齐。最后一部分显示文本居中对齐。

转换大小写

您可以使用几个不同的命令来转换大小写。以下是一些命令按键的列表:

要执行的功能 使用的按键
将光标后的单词首字母大写 META+C (C 代表 capitalize)
将单词转换为小写 META+L (L 代表 lowercase)
将单词转换为大写 META+U (U 代表 uppercase)
将段落转换为大写 块选择,然后 CTRL+X CTRL+U
将段落转换为小写 块选择,然后 CTRL+X CTRL+L

如果你要将一个完整的段落或更多内容转换为大写或小写,会出现一个新窗口和提示信息。

窗口
您已键入 C-x C-l,调用了被禁用的命令 downcase-region。它被禁用是因为新用户经常觉得它令人困惑。这是其描述的第一部分:将区域转换为小写。在程序中,它需要两个参数。这些参数指定要操作区域的起始和结束字符编号。当作为命令使用时,操作的是光标和标记之间的文本。您是否仍要使用此命令?您现在可以键入 'y' 来尝试并启用它(如果再次使用则不会提问)。'n' 取消——不尝试该命令,并且它仍然被禁用。'SPC' 仅本次尝试该命令,但保持禁用。'!' 尝试它,并仅在本会话中启用所有被禁用的命令。
在Emacs实例中,按下 CTRL+X 和 CTRL+L 键将段落转换为小写后显示的消息。

按下所提到的按键继续操作。

管理窗口

在Emacs中管理窗口可以帮助您更高效地处理文件。

例如,从您的主缓冲区中,通过按下 CTRL+h 然后 t,可以切换到Emacs教程。您的主缓冲区窗口现在是Emacs教程。如果您想切换回 myfile.txt 缓冲区,按下 CTRL+X,然后 b。这是切换缓冲区的命令。Emacs会要求您输入要切换的缓冲区名称。开始输入缓冲区名称 myfile.txt,然后按 ENTER。这将使您从Emacs教程转到您指定的文件。

第五步 – 进入模式

进入一个主模式

由于Emacs具有能够假设不同模式的能力,这也是它在UNIX社区被广泛采用的原因之一。一个模式可以增强Emacs的功能。

根据所选择的模式,Emacs可以用作编写文本文件的文字处理器,也可以适用于高级任务,例如编写Python、C或Java代码。例如,您可以更改Emacs的模式,使其能够与版本控制系统配合使用、运行Shell命令或阅读man页面。

Emacs有两种不同类型的模式。一种被称为主模式(major mode)。在主模式中,Emacs可以作为编程或脚本语言的集成开发环境(IDE)使用。在这种模式下,程序提供了特殊的功能,如语法高亮、缩进和格式化、语言特定的菜单选项,或与调试器和编译器的自动接口。

为了演示,您可以使用Emacs在Python中编写一个“Hello World”应用程序。

在您的终端和根目录中,输入以下命令:

  1. cd ~
  2. emacs hello.py

Emacs能够识别文件扩展名并自动以Python模式启动。在主缓冲区中,输入以下Python代码:

print "hello world!\n"

现在关键词会以彩色语法高亮显示。还要注意迷你缓冲区上方的状态行显示您当前所处的模式。主菜单也有一个专门针对Python的独立条目。

在Emacs主缓冲区中,编辑的Python代码具有彩色语法高亮显示,并在状态行中显示处于Python模式。主菜单包含一个“Python”选项。

使用 CTRL+X CTRL+S 保存缓冲区。

要在Emacs中更改主模式,请按下 META+X。迷你缓冲区将等待您的回应。然后,您可以输入不同的模式。以下是一些主模式的例子:

  • c-mode
  • python-mode
  • java-mode
  • html-mode
  • perl-mode
  • shell-script-mode
  • text-mode

进入一个次要模式

与主要模式相比,次要模式提供更具体的功能。这些功能可以与特定的主要模式相关联,或者与主要模式无关地在整个系统中产生影响。此外,不同于主要模式,可以同时启用多个次要模式。次要模式就像开关:有些默认开启,有些则未开启。如果一个次要模式已经开启,再次调用它将关闭它。如果它未开启,调用后将重新开启。

一个次要模式的例子是在前面的例子中使用的设置对齐的选项。

另一个次要模式的例子是自动填充模式。要在您的Emacs编辑器中进入此模式,按下 META+X 键,然后输入 auto-fill-mode

当文本长度超过70个字符时,这种模式会使得文本换行并换到下一行。请记住,当你启用一个次要模式时,它就像一个切换开关。再次调用相同的命令将会禁用换行。

以下是一些次要模式的例子:

  • auto-save-mode(自动保存模式): 此模式用于切换自动保存功能,它会在后台周期性地保存主缓冲区的内容。

  • line-number-mode(行号模式): 此模式用于切换状态栏中当前行号的显示。

  • linum-mode(行号显示模式): 此模式用于切换窗口左侧边缘的行号显示。

  • column-number-mode(列号模式): 此模式用于在状态栏中显示光标的当前列位置。

  • overwrite-mode(覆盖模式): 此模式类似于按下键盘上的“INS”键。启用后,当您输入时,它会覆盖光标右侧的文本。

  • menu-bar-mode(菜单栏模式): 此模式可以切换主菜单的显示或隐藏。

结论

在本教程中,您学习了Emacs中的各种命令、编辑功能和模式。

为了进一步了解Emacs编辑器,GNU Emacs官方网页提供了丰富的信息,包括指向Emacs Wiki等其他资源的链接。您还可以查阅GNU Emacs手册。

bannerAds