erlc 和 erl 必须在终端可用,否则 sublime 构建系统必然失效;需先验证命令行中 erlc -v 和 erl -version 能输出版本信息,再配置构建系统并指定完整路径与 working_dir。

erlc 和 erl 必须在终端可用,否则 Sublime 的任何构建配置都只是摆设——这是所有问题的起点,不是可选步骤。
确认 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"] 看似简洁,实际在多数环境下会静默失败。
- 先在终端运行
which erlc(macOS/Linux)或where erlc(Windows),拿到完整路径,例如:/Users/xxx/.asdf/shims/erlc或C:\Progra~1\erl-25.3\bin\erlc.exe - 菜单 →
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"
}
-
$file是带路径的完整文件名,$file_path是其所在目录 —— 必须设working_dir,否则erlc可能找不到-include头文件或把.beam生成到错误位置 - Windows 用户避免
C:\Program Files\...这类含空格路径,改用短路径(C:\Progra~1\...)或复制erlc.exe到无空格目录再引用
rebar3 项目别用裸 erlc 构建,得单独写脚本
单文件测试可用 erlc,但真实高并发系统(gen_server、supervisor、多模块依赖)必须靠 rebar3 管理编译路径、依赖解析和 boot 文件生成。Sublime 默认构建系统不理解项目结构。
- Linux/macOS:新建
build_rebar.sh,内容为cd $(dirname "$1") && rebar3 compile,然后在构建系统中设"cmd": ["bash", "/path/to/build_rebar.sh", "$file"] - Windows:用
.bat替代,注意用%~dp1获取当前文件所在盘符和路径 - 不要试图把
rebar3 compile直接塞进cmd数组 —— Windows 下空格和引号处理极易崩,shell 脚本更可控 - 编译后仍需手动开终端跑
erl -pa _build/default/lib/*/ebin -sname mynode,再用m(myapp).加载 —— Sublime 不适合模拟 Erlang 节点交互,强行封装只会掩盖路径和 cookie 问题
erlc 路径没写对、working_dir 没设、或者头文件不在 -pa 覆盖范围内 —— 这些细节不打印错误,只让构建静默失败。











