Sublime Text 配置 Erlang 环境需严格按三步执行:先确保终端中 erlc -v 和 erl -version 有输出,再安装官方 Erlang 插件(GitHub 地址为 https://github.com/erlang-editors/sublime-erlang),最后手动配置构建系统并写死 erlc 绝对路径、设 working_dir 为 $file_path。

Sublime Text 本身不运行 Erlang,所谓“配置环境”就是三件事:让 .erl 文件正确高亮、Ctrl+B 能调用 erlc 编译、终端里能用 erl 加载测试——缺一不可,且顺序不能乱。
确认 erlc 和 erl 已在终端可用
这是所有后续操作的前提。Sublime 的构建系统本质是执行 shell 命令,它不会自己找 Erlang,只认你环境里已有的命令。跳过这步直接配插件或构建系统,90% 的“没反应”“报错找不到命令”都源于此。
- 在终端运行
erlc -v和erl -version,必须输出类似Erlang/OTP 26的版本信息 - macOS 用
brew install erlang通常自动进 PATH;Windows 安装时若没勾选 “Add to PATH”,需手动把C:\Program Files\erl-25.3\bin加入系统环境变量(注意路径含空格) - Linux 用户若用
asdf,确保已执行asdf global erlang ref,并在新终端中验证which erlc有返回 - 别在 Sublime 里试——先关掉编辑器,在干净终端里敲两行命令,能过再往下走
只装官方 Erlang 插件,别碰 Erlang Language Support
语法高亮失效、保存删空行、-spec fun/0 解析失败,大概率是你装错了插件。社区里叫 “Erlang” 的插件不止一个,但只有 erlang-editors 维护的那个才持续适配 OTP 24+。
- 按
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS),输入Package Control: Install Package - 搜索
Erlang,只选 GitHub 地址为https://github.com/erlang-editors/sublime-erlang的那个安装 - 安装后打开任意
.erl文件,右下角应显示Erlang;若仍是Plain Text,右键 →Set Syntax→Erlang→Erlang手动切换一次,之后会自动识别 - 装错插件(如已停更的
Erlang Language Support)会导致-include跳转失效、-record字段不补全,且无法修复
构建系统必须写死 erlc 路径,不能依赖 PATH
GUI 应用(包括 Sublime)在 macOS/Linux 上往往继承不到 shell 配置的 PATH,Windows 则因空格和反斜杠解析出错。"cmd": ["erlc", "$file"] 看似简洁,实际在多数环境下会静默失败。
- macOS:在终端运行
which erlc,得到类似/Users/xxx/.asdf/shims/erlc的路径;新建Tools → Build System → New Build System…,填入:{ "cmd": ["/Users/xxx/.asdf/shims/erlc", "$file"], "file_regex": "^(.+):([0-9]+):([0-9]+):.*$", "working_dir": "$file_path", "selector": "source.erlang" } - Windows:避免用
C:\Program Files\erl这类带空格路径,改用短路径(如C:\Progra~1\erl-25.3\bin\erlc.exe)或复制erlc.exe到无空格目录(如D:\erlang\bin\erlc.exe),再在构建配置中写死该路径 -
$file_path必须显式设置,否则erlc可能找不到-include的.hrl或生成.beam到错误位置
分布式项目(rebar3)不能靠默认构建系统
纯 erlc 构建只适用于单文件测试。真实 Erlang 分布式系统(比如用 gen_server、supervisor、rpc 的项目)依赖 rebar3 管理依赖、编译多模块、生成 boot 文件。Sublime 默认构建系统不支持项目级操作。
- 不要试图让构建系统直接调用
rebar3 compile并期望它自动处理依赖路径——rebar3的工作流和erlc不同,需要完整项目结构(rebar.config、src/目录等) - 推荐做法:写一个 Shell/Batch 脚本封装
rebar3 compile && rebar3 eunit,再让 Sublime 调用它;脚本中显式cd到项目根目录,避免路径歧义 - 调试分布式行为(如节点通信、
net_kernel启动)必须回到终端:用erl -name node@127.0.0.1 -setcookie abc启动节点,再用observer:start().查看进程树——Sublime 插件做不到这点
最容易被忽略的是:Sublime 的构建系统不校验模块名与文件名是否一致,而 Erlang 强制要求二者相同(如 my_mod.erl 内必须是 -module(my_mod).)。编译通过但运行时报 undef,十有八九是这个原因。

















