查看源代码 用于 Emacs 的 Erlang 模式

目的

本用户指南的目的是向您介绍用于 Emacs 的 Erlang 模式,并提供有关其功能和特性的相关背景信息。另请参阅 Erlang 模式参考手册 Erlang 模式本身的目的在于方便 Erlang 程序员的开发过程。

先决条件

Emacs 和 Erlang/OTP 的基础知识。

Elisp

此工具包中包含两个用于 Emacs 的 Elisp 模块。erlang.el 定义了实际的 Erlang 模式,erlang-start.el 进行了一些不错的初始化。

在 UNIX 上设置

要在 UNIX 系统上设置 Erlang Emacs 模式,请编辑或在您的主目录中创建文件 .emacs

以下是一个完整示例,说明在 OTP 安装在目录 /usr/local/otp 中的情况下,应将哪些内容添加到用户的 .emacs 中。

(setq load-path (cons  "/usr/local/otp/lib/tools-<ToolsVer>/emacs"
load-path))
(setq erlang-root-dir "/usr/local/otp")
(setq exec-path (cons "/usr/local/otp/bin" exec-path))
(require 'erlang-start)

在 Windows 上设置

要在 Windows 系统上设置 Erlang Emacs 模式,请编辑/创建文件 .emacs,该文件的位置取决于系统的配置。如果设置了 HOME 环境变量,Emacs 将在 HOME 变量指示的目录中查找 .emacs 文件。如果未设置 HOME,Emacs 将在 C:\ 中查找 .emacs 文件。

以下是一个完整示例,说明在 OTP 安装在目录 C:\Program Files\Erlang OTP 中的情况下,应将哪些内容添加到用户的 .emacs 中。

(setq load-path (cons  "C:/Program Files/Erlang OTP/lib/tools-<ToolsVer>/emacs"
load-path))
(setq erlang-root-dir "C:/Program Files/Erlang OTP")
(setq exec-path (cons "C:/Program Files/Erlang OTP/bin" exec-path))
(require 'erlang-start)

注意

.emacs 中,斜杠字符 (/) 可以用作路径分隔符。但是,如果您决定使用反斜杠字符 (\),请注意反斜杠必须加倍,因为它们被 Emacs 视为转义字符。

缩进

《牛津当代英语学习词典》对 “indent” 一词的解释如下:

“使(一行打印或书写)比其他行更远离页边距开始”。

Erlang 模式当然提供了此功能。使用的布局基于该语言的常用方式。

强烈建议使用此功能,并避免以非标准方式缩进行。一些动机是:

  • 使用相同布局的代码易于阅读和维护。
  • 由于 Erlang 模式的几个功能都基于标准布局,如果使用非标准布局,它们可能无法正常工作。

缩进功能可用于重新缩进文件的大部分内容。如果某些行使用非标准缩进,它们将被重新缩进。

编辑

  • M-x erlang-mode RET - 此命令为当前缓冲区激活 Erlang 主要模式。当此模式处于活动状态时,模式行包含单词 “Erlang”。

正确安装 Erlang 模式后,当在 Emacs 中打开以 .erl.hrl 结尾的文件时,它会自动激活。

保存文件时,将检查 -module(). 行中的名称是否与文件名匹配。如果它们不匹配,Emacs 可以更改模块说明符,使其与文件名匹配。默认情况下,在执行更改之前会询问用户。

“electric” 命令是一个字符,除了插入字符之外,还会执行某种类型的操作。例如,在以分号结尾函数子句的情况下键入 ; 字符时,会生成新的函数头。electric 命令如下:

  • erlang-electric-comma - 插入逗号字符,并可能插入一个新的缩进行。
  • erlang-electric-semicolon - 插入分号字符,并可能插入下一行的原型。
  • erlang-electric-gt - 插入 > 字符,并可能插入一个新的缩进行。

要禁用所有 electric 命令,请将变量 erlang-electric-commands 设置为空列表。简而言之,将以下行放在您的 .emacs 文件中:

(setq erlang-electric-commands '())

语法高亮

Emacs 可以在显示缓冲区时使用颜色。“语法高亮” 的意思是,语法组件(例如关键字和函数名称)将着色。

语法高亮的基本思想是使程序的结构更清晰。例如,高亮显示将使查找简单的错误更容易。您是否曾经只用小写字母写过变量?使用语法高亮,变量将着色,而原子将以正常文本颜色显示。

标签

标签是一个标准的 Emacs 包,用于记录大型开发项目中有关源文件的信息。除了列出项目的各个文件之外,标签文件通常包含有关所有已定义的函数和变量的信息。到目前为止,标签系统最有用的命令是它能够在项目的任何文件中查找函数的定义。但是,标签系统不仅限于此功能,例如,可以在项目的所有文件中执行文本搜索,或执行项目范围的搜索和替换。

为了使用标签系统,必须创建一个名为 TAGS 的文件。该文件可以被视为项目所有文件中所有函数、记录和宏的数据库。TAGS 文件可以使用两种不同的 Erlang 方法创建。第一种是标准的 Emacs 实用程序 “etags”,第二种是使用 Erlang 模块 tags

Etags

etags 是 Emacs 发行版的一部分。它通常从命令行执行,例如 Unix shell 或 DOS 框。

较新版本的 Emacs 和 XEmacs 的 etags 程序原生支持 Erlang。要检查您的版本是否包含此支持,请在命令行提示符下发出命令 etags --help。在帮助文本的末尾,有一个支持的语言列表。除非 Erlang 是此列表的成员,否则我建议您升级到较新版本的 Emacs。

正如帮助文本中所见(除非您尚未升级 Emacs),etags 将文件扩展名 .erl.hrl 与 Erlang 关联。

基本上,etags 实用程序以以下形式运行:

etags file1.erl file2.erl

这将在当前目录中创建一个名为 TAGS 的文件。

etags 实用程序还可以通过在文件名位置提供单个破折号来从其标准输入读取文件列表。当项目包含大量文件时,此功能非常有用。标准的 UNIX 命令 find 可用于生成文件列表,例如:

find . -name "*.[he]rl" -print | etags -

上面的行将创建一个 TAGS 文件,涵盖当前目录和以下子目录中的所有 Erlang 源文件。

有关更多信息,请参阅 GNU Emacs 手册和 etags 手册页。

Shell

Emacs 内的 Erlang shell 的外观和感觉应与普通 Erlang shell 相同。只有一个主要区别,光标键实际上会像任何普通的 Emacs 缓冲区一样移动光标。可以通过以下命令访问命令行历史记录:

  • C-upM-pcomint-previous-input) - 移动到输入历史记录中的上一行。
  • C-downM-ncomint-next-input) - 移动到输入历史记录中的下一行。

如果 Erlang shell 缓冲区被终止,则命令行历史记录将保存到文件中。当启动新的 Erlang shell 时,会自动检索命令行历史记录。

编译

Erlang 的经典编辑-编译-错误修复周期是在编辑器中编辑源文件,将其保存到文件中,然后切换到 Erlang shell。在 shell 中给出编译命令。如果编译失败,您必须调出编辑器并找到正确的行。

使用 Erlang 编辑模式,可以在不离开 Emacs 的情况下执行整个编辑-编译-错误修复周期。Emacs 可以命令 Erlang 编译文件,并且它可以解析错误消息,以自动将点放在错误的行上。