3 Emacs 的 Erlang 模式
3.1 目的
本用户指南旨在向您介绍 Emacs 的 Erlang 模式,并提供有关其功能和特性的相关背景信息。另请参阅 Erlang 模式参考手册。Erlang 模式的本身目的是为了促进 Erlang 程序员的开发过程。
3.2 先决条件
具备 Emacs 和 Erlang/OTP 的基本知识。
3.3 Elisp
此工具包包含两个用于 Emacs 的 Elisp 模块。一个是定义实际的 erlang 模式的 erlang.el,另一个是进行一些不错的初始化的 erlang-start.el。
3.4 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)
3.5 Windows 上的设置
要在 Windows 系统上设置 Erlang Emacs 模式,请编辑/创建 .emacs 文件,文件的位置取决于系统的配置。如果设置了 HOME 环境变量,Emacs 将在 HOME 变量指示的目录中查找 .emacs 文件。如果未设置 HOME,Emacs 将在 C:\ 中查找 .emacs 文件。
假设 OTP 安装在 C:\Program Files\erl<Ver> 目录中,下面是一个完整示例,说明应将哪些内容添加到用户的 .emacs 中。
(setq load-path (cons "C:/Program Files/erl<Ver>/lib/tools-<ToolsVer>/emacs" load-path)) (setq erlang-root-dir "C:/Program Files/erl<Ver>") (setq exec-path (cons "C:/Program Files/erl<Ver>/bin" exec-path)) (require 'erlang-start)
在 .emacs 中,斜杠字符 "/" 可用作路径分隔符。但是,如果您决定使用反斜杠字符 "\”,请注意您必须使用双反斜杠,因为 Emacs 将它们视为转义字符。
3.6 缩进
《牛津现代英语学习词典》对单词“indent”的解释如下:
"将(打印或书写行)从页边距开始的距离比其他行更远”。
当然,Erlang 模式提供了此功能。使用的布局基于该语言的通用用法。
强烈建议使用此功能,并避免以非标准方式缩进行。一些动机是
- 使用相同布局的代码易于阅读和维护。
- 由于 Erlang 模式的几个功能基于标准布局,因此如果使用非标准布局,它们可能无法正常工作。
缩进功能可用于重新缩进文件的较大部分。如果某些行使用非标准缩进,它们将被重新缩进。
3.7 编辑
- 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 '())
3.8 语法高亮
Emacs 可以使用颜色显示缓冲区。通过“语法高亮”,我们的意思是语法组件(例如关键字和函数名称)将被着色。
语法高亮的基本思想是使程序的结构更清晰。例如,高亮显示将使您更容易发现简单的错误。您是否曾经只用小写字母编写变量?通过语法高亮,变量将被着色,而原子将以普通文本颜色显示。
3.9 标签
标签是 Emacs 的标准软件包,用于记录大型开发项目中源文件的相关信息。除了列出项目的全部文件外,标签文件通常还包含有关定义的所有函数和变量的信息。到目前为止,标签系统最有用的命令是它能够在项目的任何文件中查找函数的定义。但是,标签系统不仅限于此功能,例如,可以对项目中的所有文件进行文本搜索,或执行项目范围内的搜索和替换。
为了使用标签系统,必须创建一个名为 TAGS 的文件。该文件可以看作是所有文件中所有函数、记录和宏的数据库。可以使用两种不同的方法为 Erlang 创建 TAGS 文件。第一个是标准的 Emacs 实用程序“etags”,第二个是使用 Erlang 模块 tags。
3.10 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 手册页。
3.11 Shell
Emacs 中的 Erlang shell 的外观和感觉应与普通 Erlang shell 相同。只有一个主要区别,光标键实际上会像在任何正常的 Emacs 缓冲区中一样移动光标。可以使用以下命令访问命令行历史记录
- C-up 或 M-p (comint-previous-input) - 移动到输入历史记录中的上一行。
- C-down 或 M-n (comint-next-input) - 移动到输入历史记录中的下一行。
如果 Erlang shell 缓冲区被终止,则命令行历史记录将保存到一个文件中。在启动新的 Erlang shell 时,会自动检索命令行历史记录。
3.12 编译
Erlang 的经典编辑-编译-修复错误循环是在编辑器中编辑源文件,将其保存到文件并切换到 Erlang shell。在 shell 中,给出编译命令。如果编译失败,您必须取出编辑器并找到错误的行。
使用 Erlang 编辑模式,可以在不离开 Emacs 的情况下执行整个编辑-编译-修复错误循环。Emacs 可以命令 Erlang 编译文件,并且可以解析错误消息以自动将光标置于错误行上。