如何在Linux中使用Emacs编辑器
介绍
Emacs 是可用于基于 Linux 和 UNIX 的系统的最古老和最通用的文本编辑器之一。 它已经存在了很长时间(对于 GNU emacs 已有二十多年),并且以其强大而丰富的编辑功能而闻名。 Emacs 也不仅仅是一个文本编辑器; 它可以使用不同的“模式”进行定制和扩展,使其能够像集成开发环境 (IDE) 一样用于 Java、C 或 Python 等编程语言。
对于那些同时使用无处不在的 vi 和用户友好的 nano 的人来说,emacs 将成为一个有趣的交叉点。 它的优势和特点与 vi 相似,而其菜单、帮助文件和易于记忆的命令键与 nano 相比。
在本文中,我们将了解如何在 Linux 系统中安装 emacs 并将其用于基本的文本编辑。 Emacs 也可用于 Linux 的图形窗口管理器,如 GNOME; 但是,我们只会在这里介绍“基于文本”的版本。
如何安装 Emacs
您只需运行以下命令即可检查您的 Linux 系统是否安装了 emacs:
emacs
如果程序已安装,编辑器将以默认的欢迎消息启动。 在我的 CentOS 6.5 系统中情况并非如此:
[root@TestLinux ~]# -bash: emacs: command not found -bash: -bash:: command not found
所以我运行以下命令来安装 emacs 包:
[root@TestCentOS ~]# yum install emacs
在 Ubuntu 12 中,我运行以下命令来安装 emacs。
root@TestUbuntu:~# apt-get install emacs
在这两种情况下,Linux 都会从可用的镜像或软件库中查询所需的软件包信息,并询问您是否愿意继续安装它。 它还将为您提供所需磁盘空间的估计值。 一旦你说是(只需按一下“y”键),所有 emacs 包及其依赖项都将被下载并安装。 该过程就像安装任何其他 Linux 软件包一样:会滚动显示大量文本消息并显示安装进度。 最后,emacs 将可供您使用。
初尝 Emacs
用户界面
您可以单独启动 emacs,发出简单的命令 emacs
,或者在它后面指定一个文件名。 如果文件不存在,emacs 会从一个空的编辑缓冲区开始,并等待您开始输入。 对于磁盘上的现有文件,内容首先复制到内存中,然后加载到主编辑窗口中。
在下面的屏幕截图中,我自己启动了 emacs。 该程序在主窗口中显示欢迎消息:
要开始一个新文件,我已将光标移到“访问新文件”链接上,然后按 Enter。 屏幕底部会出现一个提示,要求输入文件名。 Find file: ~/
我为我的新文件 (myfile.txt) 输入一个名称,然后再次按 Enter。 出现一个干净的窗口。 这是新文件,可以输入文本:
让我们暂停一下,看看用户界面的不同部分。 现在也是我们熟悉一些基本概念的时候了。
在屏幕的最顶部有一个菜单。 这是与 vi 的一个主要区别,在 vi 中显示的是一个空白屏幕。 这看起来像任何其他应用程序菜单,实际上,许多 emacs 功能都可以从这里访问。
稍后,我们将看到如何访问它。
菜单后,有一个很大的编辑空间。 这称为 主缓冲区 ,您可以在其中键入文本或查看文件的内容。
让我们多谈谈缓冲区。
当 emacs 编辑磁盘上的现有文件时,该文档的副本首先加载到内存中,然后显示在主编辑窗口中。 内存中的这个区域称为“buffer”。 当您处理文档时,您在编辑空间中所做的所有更改都会应用到缓冲区; 磁盘上的原始文件保持不变。 有时,emacs 会在后台自动保存,但只有当您手动保存文档时,更改才会真正写入磁盘。 这同样适用于新文件:所有更改都在缓冲区上进行,直到您保存它。
因此,emacs 中的主要编辑空间是您对缓冲区的视图。
在主缓冲区之后,屏幕底部附近会显示一个突出显示的文本栏。 这称为 状态栏 或 模式线 。 这显示的内容取决于 emacs 当前所处的“模式”。 除其他外,状态栏显示:
- 当前文件的名称
- 当前光标位置
- 当前编辑模式(在我们的例子中是文本模式)
- 文件的状态(--对于未修改的文件,**对于未保存更改的文件和 %% 对于只读文件)
最后,在屏幕结束的状态栏下方存在一行空格。 在我们的示例中,它显示文本“(新文件)”。 该区域称为 迷你缓冲区 。 Emacs 是一个命令驱动的工具,迷你缓冲区是您与 emacs 交互的主要点。 这是 emacs 提示您输入命令或显示输出的地方。
视窗
基于文本的 emacs 版本对“windows”的处理与基于 GUI 的版本完全不同。 与基于 GUI 的应用程序不同,基于文本的 emacs 窗口不只是弹出,它们不能在终端或控制台会话中实际弹出。 相反,当 emacs 需要启动一个新窗口时,它的主缓冲区被分成两部分,就像在浏览器中有两个框架一样。 上半部分显示主缓冲区,下半部分显示新内容。 当您访问它的帮助文件或教程时,emacs 生成新窗口的一个示例。 稍后我们将详细讨论 Windows。
基本命令键
现在我们已经熟悉了用户界面,可能很想开始打字和乱搞。 就在我们这样做之前,让我们再花几分钟了解一下 emacs 的命令键。 像 Linux 中的大多数东西一样,emacs 严重依赖键盘命令。 幸运的是,这些击键中的大多数都相当标准且易于记忆。 此外,与 vi 不同,emacs 不必在编辑模式和命令模式之间切换。 当您使用 emacs 打开文件时,您可以同时开始输入和发出命令。
emacs 中的命令功能通常涉及两个或三个键。 最常见的是 Ctrl 键,然后是 Alt 或 Esc 键。 在 emacs 文献中,Ctrl 以简写形式显示为“C”。 因此,如果您看到类似 Cx Cc 的内容,则表示“同时按 Ctrl 键和 x,然后按 Ctrl 和 c”。 同样,如果您看到 Ch t,则表示“同时按下 Ctrl 和 h,然后松开两个键并按下 t”。
Alt 和 Esc 键在 emacs 术语中称为“meta”键。 在 Mac 机器中是 Option 键,在某些键盘中它被标记为 Edit。 这就是为什么 emacs 文档将这些键显示为“M”(M 表示元)。 就像 Ctrl 键一样,emacs 使用带有元键的多键功能。 因此,如果您看到像 Mx 这样的符号,它的意思是“同时按下 Alt/Esc/Option/Edit 键和 x”。
Enter 键显示为 RET(“Return”的缩写),Esc 键通常显示为 E。
Esc 键通常在您尝试退出命令或提示时发挥作用。 一直按住它,直到你摆脱麻烦。 另一种取消操作的方法是按 Cg (Ctrl+g)。
保存和退出
一旦您对文档进行了一些更改或编写了一些文本,您就会想要保存它。
要保存文件,请按 Cx Cs(Ctrl+x,然后按 Ctrl+s)。 迷你缓冲区将显示如下消息:
Wrote <file_path_and_name>
如果您不想保存但退出,请使用命令 Cx Cc(Ctrl+x,后跟 Ctrl+c)。 如果有未保存的数据,小缓冲区会显示如下提示:
Save file <file_path_and_name>? (y, n, !, ., q, C-r, d or C-h)
当您按“n”(否)时,emacs 会给您第二次改变主意的机会:
Modified buffers exist; exit anyway? (yes or no)
如果您确实确定不想保存,请输入 yes(整个单词)并按 Enter。 这将带您回到命令提示符。
四处走走:导航基础知识
如果您不知道正确的键,浏览长文档或帮助主题可能是一项乏味的任务。 幸运的是,在 emacs 中没有太多需要记住的内容,而且它们非常直观。 这是一个列表:
To perform this function | Use these keys -------------------------------------|--------------------------------- Moving to the next line | C-n (n for Next) Moving to the previous line | C-p (p for Previous) Moving one character forward | C-f (f for Forward) Moving one character backward | C-b (b for Backward) Moving one word forward | M-f (f for Forward) Moving one word backward | M-b (b for Backward) Moving to the start of a line | C-a Moving to the end of a line | C-e (e for End) Moving to the start of a sentence | M-a Moving to the end of a sentence | M-e (e for End) Moving one page down | C-v (or PgDn) Moving one page up | M-v (or PgUp) Moving to the beginning of the file | M-< (Alt + Shift + "<") Moving to the end of the file | M-> (Alt + Shift + ">")
如前所述,C 代表 Ctrl 键,M 代表 meta(Alt / Option / Esc / Edit)。
基本编辑功能
我们现在将学习emacs中的一些基本编辑功能。 让我们从选择文本的简单任务开始。
标记文本区域
要标记文本区域(类似于在流行的文字处理器中选择文本),请执行以下步骤:
- 将光标移动到您希望开始选择的位置。 您可以使用前面描述的任何方法来移动光标。
- 按 C-Space (Ctrl + Space Bar) 或 C-@ 设置标记。 迷你缓冲区将显示
Mark set
状态消息。 - 将光标移动到您希望片段结束的位置。 同样,使用前面描述的任何组合键。
- 文本将突出显示到您的光标现在所在的位置。
- 如果要“取消标记”突出显示的文本,请按 C-Space 或 C-@ 两次。 迷你缓冲区将显示
Mark deactivated
状态消息。
以下是标记文本的示例:
如果要选择主缓冲区的所有内容(即 “全选”),按 Cx h。
按 Mh 将选择当前段落。
剪切、复制和粘贴
标记文本区域后,您可以复制或剪切文本并将其粘贴到其他位置。
- 要复制文本,请按 Ew
- 要剪切文本,请按 Cw
- 将光标移动到需要粘贴文本的位置。
- 按 Cy(y 代表“yank” - 您正在将文本从一个位置拉到另一个位置)。 内容将粘贴在这里。
删除文本
对于删除,Backspace 和 Delete 键的工作方式与您期望的一样。
要删除整个单词,请将光标移动到单词的开头并按 Md。 要删除多个单词,请按住 meta 键并按住 d。 单词将开始一一删除。
要删除整行,请将光标放在您想要的位置并按 Ck。 这将删除直到屏幕上行尾的文本。
要删除句子,请按 Mk。 我们知道,当 emacs 在句号后看到两个空格时,它认为一个句子已经完成。 这与传统出版不同,在传统出版中,新句子在句号后的单个空格后开始。 这就是 emacs 足够聪明的方式,即使一个句子已经跨多行也可以知道。
撤销重做
撤消最后一个操作很简单。 按 Cx u。 您可以继续重复此操作以倒退。 另一个组合键是 C-/ (Ctrl + /) 或 C-_ (Ctrl + _)。
要重做上一次撤消操作,请按 Cg,然后按 C-_(即 Ctrl + Shift+ 下划线)。 做同样事情的另一种方法是再次按 Cx Cu(撤消撤消)。
搜索和替换
emacs 中有两个搜索方向:向前和向后。 在向前搜索中,将从当前光标位置向前搜索您指定的单词。 对于向后搜索,情况正好相反。
- 按 Cs 向前搜索
- 按 Cr 向后搜索
迷你缓冲区将显示如下提示
I-search:
或者
I-search backward:
一旦您开始输入,emacs 将尝试搜索正在输入的文本并突出显示它在主缓冲区中找到的任何匹配项。
这是一个例子。 下一个屏幕截图显示我们正在尝试搜索单词“cat”。 请注意如何突出显示主缓冲区中的每个事件。
要替换文本,请执行以下步骤:
- 按 M-%(即 Alt + Shift + %)。 迷你缓冲区显示要搜索的文本的提示 (
Query replace:
)。 - 输入文本并按 Enter
- 迷你缓冲区显示类似 (
Query replace <search_word> with:
) 的消息 - 键入替换文本,然后按 Enter。
- 对于 emacs 找到的每个匹配项,它都会询问您是否要进行替换(
Query replacing <search_word> with <replace_word>: (C-h for help)
)。 您可以执行以下任何操作: - 按 y 替换找到的当前匹配项。
- 按 n 跳到下一场比赛。
- 按 q 退出而不进行任何替换(基本上是转义)。
- 按 ! 在没有任何提示的情况下进行全局替换。 (emacs 会显示类似
replaced n occurrences
的消息)
拼写检查
拼写检查在 emacs 中通过 ispell 拼写检查器执行。 您可以使用 ispell 来检查整个缓冲区或选定区域的拼写。
我们知道,当我安装 emacs(这是 emacs 23.3.1)时,我的测试 CentOS 6.5 和 Ubuntu 12 系统中默认没有安装 ispell。 对于 Ubuntu,我必须使用以下命令单独安装 ispell:
root@TestUbuntu:~# apt-get install ispell
而对于 CentOS,它是 hunspell:
root@TestCentOS:~# yum install hunspell
现在,如果您已安装拼写检查器并在系统中运行,请按 Mx (Alt + x)。 迷你缓冲区将等待您的回复。 输入 ispell- 并按 Tab:
M-x: ispell-
将在主缓冲区下打开一个新窗口,并显示与 ispell 相关的不同选项:
In this buffer, type RET to select the completion near point. Possible completions are: ispell-buffer ispell-change-dictionary ispell-comments-and-strings ispell-complete-word ispell-complete-word-interior-frag ispell-continue ispell-kill-ispell ispell-message ispell-minor-mode ispell-pdict-save ispell-region
在迷你缓冲区中的 ispell- 之后开始键入“b”,然后再次按 Tab。 Emacs 将使用选项 ispell-buffer 来完成它。 按 Enter 键,emacs 将开始对整个文档进行拼写检查。
以下两张截图取自 Ubuntu 系统。 我们有流行的用 emacs 编写的童谣,到处都有一些拼写错误。 调用 ispell 后,请注意 emacs 如何建议正确的拼写并提示您选择正确的单词。 当您键入与建议相对应的数字时,将发生替换并且 ispell 将移动到下一个拼写错误的单词。
拼写检查完成后,迷你缓冲区将显示如下消息:
Spell-checking <file_name> using ispell with american dictionary...done
左、右和中心对齐
要使行居中,请将光标移到行首并按 Mo Ms(Alt-o 后跟 Alt-s)。
要对齐选定的文本区域,请执行以下步骤:
- 创建一个文本区域以突出显示您希望对齐的文本
- 按 Mx。 迷你缓冲区将等待响应
- 开始输入 set-justification- 并按 Tab。
- 您将获得完成选项,例如
set-justification-center, set-justification-left
、set-justification-right
、set-justification-none
和set-justification-full
- 完成对齐命令(例如 set-justification-right)并按 Enter。
- 所选文本将被对齐。
在下图的第一部分中,已选择原始文本(以蓝色突出显示)。 然后我们使用 set-justification 命令对文本进行右、左和居中对齐。
转换案例
以下是一些用于转换大小写的命令键。
To perform this function | Use these keys ----------------------------------- |---------------------------- Capitalizing a word after the cursor | M-c (c for Capitalize) Converting a word to lower case | M-l (l for Lower case) Converting a word to upper case | M-u (u for Upper case) Converting a paragraph to upper case | Block select, then C-x C-u Converting a paragraph to lower case | Block select, then C-x C-l
访问菜单
当 emacs 启动时,它通常会占据整个屏幕。 它的大部分功能也可以从位于屏幕顶部的菜单栏访问。
与基于 GUI 的程序不同,基于文本的 emacs 菜单不能通过鼠标下拉。 事实上,您甚至无法使用快捷键突出显示和滚动菜单。
要访问菜单,您必须按 F10 键。 这将在主缓冲区下打开另一个窗口并显示访问菜单项的键列表。 迷你缓冲区将提示您输入所需的密钥。 一旦你按下那个键,新窗口的内容就会改变,反映下一级的选项。 从那里你可以挖掘得越来越深。
要退出菜单(无论您进入多深),只需按 Esc 键三次(Esc-Esc-Esc)。 这通常会关闭菜单窗口,您将返回主缓冲区。
在以下两个屏幕截图中,主菜单窗口已在主缓冲区下打开,并显示编辑菜单选项。 请注意迷你缓冲区中的提示。
为了了解 emacs 的强大功能,以下是其工具菜单中可用的一些附加功能:
- 日历
- 简单的计算器
- 可编程计算器
- 搜索目录
- 加密和解密文档
- 发送和阅读电子邮件
- 使用 grep 搜索文件
- 拼写检查
- 运行 shell 命令和编译代码
- 版本控制
- 比较和合并文件
访问帮助和教程
Emacs 有一个广泛的帮助系统和教程可用。 访问它相当简单:您可以使用菜单或使用快捷键。
以下是您如何通过菜单找到帮助的方法:
- 按 F10 键。 将在主缓冲区下方打开一个新窗口,显示主菜单选项。
- 按 h(寻求帮助)。 窗口的内容会变成这样:
Press PageUp key to reach this buffer from the minibuffer. Alternatively, you can use Up/Down keys (or your History keys) to change the item in the minibuffer, and press RET when you are done, or press the marked letters to pick up your choice. Type C-g or ESC ESC ESC to cancel. In this buffer, type RET to select the completion near point. Possible completions are: e==>Emacs Tutorial E==>Emacs Tutorial (choose language)... f==>Emacs FAQ n==>Emacs News k==>Emacs Known Problems s==>Send Bug Report... p==>Emacs Psychotherapist S==>Search Documentation d==>Describe r==>Read the Emacs Manual m==>More Manuals F==>Find Emacs Packages P==>External Packages g==>Getting New Versions c==>Copying Conditions 0==>(Non)Warranty a==>About Emacs A==>About GNU
从这里选择适当的选项。
或者,如果您喜欢快捷键,这里有一个快速列表:
- 要访问 emacs 教程,请按 Ch t
- 要阅读 emacs 手册,请按 Ch r
管理窗口
要在 emacs 中四处走动,您需要知道的一件事是如何管理窗口。 举个例子:你正在编写一个文档并且需要访问 emacs 教程。 您按下 Ch t,教程会在主缓冲区的完整窗口中开始。 你如何回到你的文档? Esc 不起作用,Cg 也不起作用。
按 Cx b 退出活动缓冲区(在本例中为教程)。 这是 切换缓冲区 命令。 Emacs 将提示您输入缓冲区名称。 您可以开始输入缓冲区名称(在本例中为文档名称)并按 Tab。 就像主 shell 中的命令完成一样,emacs 将完成其余部分。 按 Enter 键,您将返回文档。
这是一个示例,我刚刚打开了教程窗口并希望返回到名为 myfile.txt 的主文档。 我已发出命令 Cx b 并且 emacs 提示我输入缓冲区名称。
Emacs commands generally involve the CONTROL key (sometimes labeled CTRL or CTL) or the META key (sometimes labeled EDIT or ALT). Rather than write that in full each time, we'll use the following abbreviations: ... ... ... -=--:**--F1 TUTORIAL Top L1 (Fundamental)---------------------------- Switch to buffer (default myfile.txt): my
我在提示符下输入“my”,然后再次按 tab,emacs 会为我完成其余的工作。 按 Enter 然后将我带回文档。
回到文档的主缓冲区后,我可以再次按 Cx b 切换到 TUTORIAL 缓冲区。 我可以开始输入“TU”并按 Tab。 Emacs 将完成其余的工作,然后按 Enter 将带我进入教程页面。
退出窗口的另一个选项是按 Cx 0。 这通常会杀死当前活动的窗口。
Emacs 模式
emacs 在 UNIX 社区中被广泛采用的原因之一是它能够假设不同的 模式 。 Emacs 术语中的 mode 决定了它在当前设置下的行为方式。
根据选择的模式,emacs 可以用作编写文本文件的简单文字处理器,就像我们迄今为止所做的那样,或者它可以适用于其他高级任务,例如编写 Python、C 或 Java 代码。 例如,您可以更改 emacs 的模式以使其适用于版本控制系统、运行 shell 命令或阅读手册页。
有两种不同类型的 emacs 模式。 一种叫做主模。 在主要模式下,emacs 可以用作编程或脚本语言的集成开发环境。 在这些模式下,该程序提供了专门的功能,如颜色语法突出显示、缩进和格式化、特定于语言的菜单选项或与调试器和编译器的自动接口。
举个例子,我们将使用 emacs 在 Python 中编写一个简单的“Hello World”应用程序。
在 shell 提示符下,使用我们的 Python 文件名调用 emacs:
[root@TestCentOS ~]# emacs hello.py
Emacs 足够聪明,可以知道文件扩展名,并将以 Python 模式启动。 正如您在屏幕截图中看到的,状态行显示模式(Python),主菜单也有一个单独的 Python 条目。
然后我们为我们的 hello world 应用程序编写代码。 请注意主缓冲区现在如何以不同颜色显示关键字和评论。
我们现在可以保存文件、退出 emacs、更改文件的权限并从命令提示符运行它。
要从 emacs 中更改主模式,请按 Mx 键。 迷你缓冲区将等待您的响应。 一些主要模式的示例是:
- c模式
- 蟒蛇模式
- java模式
- html模式
- perl 模式
- 外壳脚本模式
要返回简单的文本编辑,请键入 text-mode 并按 Enter。
与主要模式相比,次要模式提供了特定的功能。 一般来说,这些功能可以绑定到特定的主模式,或者具有系统范围的效果,而与主模式无关。 此外,与主要模式不同,任何时候都可以有多个次要模式有效。 次要模式也像开关:一些默认启用,一些不启用。 如果次要模式已经打开,调用它将关闭它。 如果它关闭,它将重新打开。
我们之前使用过两种次要模式:一种是使用 ispell-mode 进行拼写检查,另一种是设置对齐方式。
这是次要模式的另一个示例:
M-x: auto-fill-mode
此模式允许文本行在其长度超过 70 个字符时分断并换行到下一行。 这是一个拨动开关,这意味着再次调用它将禁用换行。
以下是次要模式的一些示例:
- auo-save-mode:这会切换自动保存的属性,该属性会定期保存场景后面的主缓冲区的内容。
- line-number-mode:切换状态栏中当前行号的显示。
- linum-mode:切换沿窗口左边缘的行号显示。
- column-number-mode:显示光标在状态栏中的当前位置。
- overwrite-mode:相当于按了INS键。 打开后,它会在您键入时覆盖光标右侧的文本。
- menu-bar-mode:可以打开或关闭主菜单。
结论
这是对 emacs 的一个非常基本的介绍。 我们没有涉及更高级的主题,例如编辑 emacs 配置文件或通过脚本增强其功能。
该程序是用 Lisp 和 C 编写的,它的原始能力来自用 Elisp (Emacs Lisp) 编写代码以自定义其默认行为的能力。 使用 Elisp,程序员和高级用户可以更改或增强 emacs 功能、录制宏、创建新快捷键或构建新功能。 与任何高级计算机软件一样,emacs 具有庞大的命令集,掌握所有内容并不容易。 它的内容如此之多,以至于 Internet 上的整个开发人员社区和编程资源都只关注 emacs 命令和操作方法。
但是我们今天在这里介绍的内容将帮助您开始进行基本的编辑,而这就是您目前可能需要的全部内容。 熟悉基本命令后,您可以继续学习更高级的主题。
GNU Emacs 网页包含大量信息,包括指向其他资源的链接,例如 Emacs Wiki。 我强烈推荐你访问这个站点。