Emacs 模式是不同的行为和功能,您可以根据不同情况开启或关闭(当然,也可以自定义)。模式使得一个编辑器(Emacs)在编写文档、使用各种语言(C、C++、Perl、Python、Java 以及更多)编程、创建主页、发送电子邮件、阅读 Usenet 新闻、跟踪您的约会,甚至玩游戏等方面都同样有用。
Emacs 模式只是 Lisp 代码库,它们以某种方式扩展、修改或增强 Emacs。
基本上有两种可用的模式:主要模式和次要模式。在您断断续续地使用过一些模式之前,这种区别不是最容易理解的,但让我们尝试一下。
在给定时间只能激活一个主要模式。在给定时间可以激活多个次要模式。主要模式倾向于特定于语言或任务,而次要模式是更小且不太具体的实用程序,可以跨越许多任务。
听起来有点抽象,所以让我们尝试一个例子。当我编写纯文本文件时,我经常使用一种模式。它被称为 text-mode
。此模式专为编写自由格式文本(如 README 文件)而设计。它了解如何识别单词和段落,并且通常确保在使用普通导航键时执行我期望的操作。
当我为人类阅读编写文本时,我通常希望它看起来不错。它应该正确地自动换行到合理的宽度等等。要启用自动换行,我只需打开 auto-fill
次要模式。当我打字并到达行尾时,此模式会尝试做正确的事情。“正确的事情”的概念在 text-mode
中与在 java-mode
中是不同的。我不希望我的 Java 代码像英语文本一样自动换行。但我确实希望我的 Java 代码中的注释块自动换行!auto-fill
模式足够智能,可以弄清楚这一点。
各种 Emacs 模式的作者在确保应该作为次要模式工作的功能成为次要模式方面做得非常出色。
如果您回顾一下 Emacs 屏幕的 ASCII 草图,您会注意到模式行标识了 Emacs 所处的模式。在那种情况下,它处于一个名为“Lisp Interaction”的模式,这是默认模式。如果您要编写 Lisp 代码,它才真正有用。(但是由于 Emacs 的大部分是用 Lisp 编写的,为什么不呢?)
首先也是最重要的,Emacs 是由程序员为程序员设计的。几乎您可以想到的每种流行的编程语言(甚至一些不太流行的语言)都有高质量的模式可用。我在这里只简要介绍其中的一些。
大多数编程模式都有一些共同的特征。通常,它们会执行以下部分或全部操作:
此外,还有一些非语言特定的模式可以帮助处理许多语言编程中常见的任务。例如,与您的版本控制软件接口、自动向您的代码添加注释、创建 Makefile、更新更改日志等等。
当您将所有这些模式加在一起,并考虑 Emacs 代码的成熟度和稳定性时,它与商业销售的 C++ 和 Java 等语言的集成开发环境 (IDE) 相比也毫不逊色。而且,当然,它是免费的。
由于 C、C++ 和 Java 的语法非常相似,因此有一个 Emacs 模式可以处理所有这三种语言(以及 Objective-C 和 IDL)。这是一个非常成熟和完整的软件包,它包含在 Emacs 发行版中。此模式称为 cc-mode
或 CC Mode
。
有关更多详细信息或下载更新版本,请访问 https://pythonlang.cn/emacs/。
实际上有两种在 Emacs 中编辑 Perl 代码的模式。第一个称为 perl-mode
(正如您所期望的那样),第二个是 cperl-mode
。我对这段历史以及为什么有两种模式没有很好的理解(文档没有说明),但似乎 perl-mode
是 Emacs 中编辑 Perl 代码的原始模式。它似乎比 cperl-mode
功能更少,并且缺乏识别 Perl 一些更高级语言结构的能力。
就我个人而言,我使用并推荐 cperl-mode
,它似乎得到了积极维护,并且几乎拥有我可能想要的所有功能。您可以在这里找到最新版本:ftp://ftp.math.ohio-state.edu/pub/users/ilya/emacs。
但不要只听我的。尝试一下这两个模式,然后选择最适合您需求的一个。
Python(另一种非常流行的脚本语言)也有可用的 Emacs 模式。据我所知,它没有与 GNU Emacs 一起分发,但它与 XEmacs 一起分发。不过,它在两个编辑器中都运行良好。
您可以从官方 Python 网站 https://pythonlang.cn/emacs/python-mode/ 获取 python-mode
。
还有许多其他编辑模式可以帮助程序员。这些模式可以帮助处理以下事项:
以及更多。请参阅本文档的最后一节,以获取有关查找其他模式和附加组件的更多信息。
精美的 Emacs 模式不仅限于编写代码的人。编写文档(任何类型的文档)的人也可以从各种 Emacs 模式中受益。
ispell
模式)许多类型文档的作者有时需要进行拼写检查。如果您安装了 GNU ispell,您可以键入 M-x ispell
并拼写检查当前缓冲区。如果 ispell 找到它不认识的单词,它会提示您提供可能的替换列表,并允许您选择其中一个(或不选择)。它在功能上等同于许多流行的非免费软件包中的拼写检查器。
html-helper
模式)如果您发现自己偶尔(甚至经常)编写 HTML 文件,您可能需要尝试 html-helper-mode
。它可以从 http://www.santafe.edu/~nelson/tools/ 获取,文档和相关内容也是如此。
顾名思义,html-helper-mode
提供了许多东西来帮助那些仍然以老式方式手动编写 HTML 的人。
tex-mode
)当您在 TeX 中编写文档时,让 Emacs 添加一些颜色并突出显示反斜杠、大括号和其他字符通常很有帮助。tex-mode
会为您处理这些。
虽然我现在不直接用 TeX 编写太多内容,但当我这样做时,这种模式被证明对于使我的 TeX 源代码更具可读性非常有帮助。
sgml-mode
)您现在正在阅读的文档是用 SGML 编写的(并且可能已转换为您正在阅读的格式)。sgml-mode
为 SGML 文档提供了所有基本功能:验证、突出显示、向前标签、向后标签等等。它是 Emacs 的标准组成部分。
当然,还有许多其他方便的模式可以使生活更轻松。以下是一些流行的模式示例:
vc
模式)vc
模式与大多数流行的版本控制后端(RCS、SCCS、CVS)接口,使签入和签出文件、管理发布等变得非常容易。它是 Emacs 的标准组成部分,并在 Emacs 文档中进行了记录。
为什么要切换到另一个 X 窗口或虚拟控制台来运行一些 shell 命令?在 Emacs 中执行此操作,并节省您的麻烦。:-)
M-x shell
将在 Emacs 缓冲区中启动 shell。您可以使用此缓冲区执行大多数您可以使用普通 shell 提示符执行的操作(除了运行像 vi
或 pine
这样的全屏程序),因为 Emacs 在幕后与您的真实 shell 通信。
这也是 Emacs 的标准组成部分,因此您会在 Emacs 文档中找到相关文档。
为什么要切换到另一个 X 窗口或虚拟控制台来运行 telnet 或 FTP?在 Emacs 中执行此操作,并节省您的麻烦。(注意到模式了吗?)
就像在 Emacs 内部运行 shell 一样,您可以 telnet 和 ftp。尝试 M-x telnet
或 M-x ftp
亲自体验一下。请参阅文档以了解所有细节。
为什么要切换到另一个 X 窗口或虚拟控制台来阅读手册页?在 Emacs 中执行此操作,并节省您的麻烦。(我保证。我会停止的。)
就像在 Emacs 内部运行 shell 一样,您可以阅读手册页。尝试 M-x man
亲自体验一下。请参阅文档以获取更多信息。
引用 ange-ftp
文档
此软件包尝试使从 GNU Emacs 中使用 FTP 访问文件和目录尽可能简单和透明。通用文件处理例程的子集已扩展为与 FTP 交互。
这意味着您可以将远程计算机上的文件视为本地文件。因此,如果您需要编辑另一台计算机上的文件,只需告诉 Emacs 打开它(使用略有不同的路径语法),它就会处理登录和检索文件的所有细节。然后,当您通过 C-x C-s
保存文件时,ange-ftp
会拦截保存并将文件写回远程计算机。
略有不同的路径语法如下所示... 名为“myfile”的文件,位于名为“my.host.org”的计算机上的“user”目录中,可以通过打开 (C-x f
) 文件来打开
/user@my.host.org:~user/myfile
这也是 Emacs 发行版的标准组成部分,因此您可以在 Emacs 文档中找到相关文档。
感谢 Etienne Grossmann ( etienne@anonimo.isr.ist.utl.pt) 提供的以上示例。