sublime text 不支持 erlang 分布式开发,仅能辅助语法高亮、编译和头文件跳转;必须使用官方 erlang 插件(https://github.com/erlang-editors/sublime-erlang)以支持 otp 24+ 的 -spec/-callback 语法,且需确保文件编码为 utf-8 without bom、working_dir 正确设置、.hrl 路径可解析。

Sublime Text 不能做 Erlang 分布式开发,它连单节点运行都不支持——所谓“分布式”,只能靠你在终端里手动启多个 erl 节点、用 -name 或 -sname 配置网络名、再通过 net_adm:ping() 连通。Sublime 唯一能帮你的,是让 .erl 文件高亮正确、编译不报路径错、跳转 -include 头文件时不崩。
为什么装了 Erlang 插件还是不显示 -spec / -callback?
因为插件没选对,或者语法 scope 没激活。官方维护的 Erlang 插件(GitHub 地址 https://github.com/erlang-editors/sublime-erlang)从 OTP 24 开始才完整支持 -spec、-callback、-opaque 等新语法;其他名字带 “Erlang” 的插件(比如已停更的 Erlang Language Support)会把 -spec fun() -> ok. 当成注释或直接忽略。
- 安装后打开任意
.erl文件,右下角必须显示Erlang—— 若是Plain Text,右键 →Set Syntax→Erlang→Erlang手动切一次 - 确认插件启用:按
Ctrl+Shift+P输入Package Control: List Packages,看列表里是否有Erlang(不是erlang-sublime或SublimeErlang) - 如果
-spec行仍无颜色,用Ctrl+Alt+Shift+P查当前光标位置的 scope,应看到类似meta.spec.erlang;若只有source.erlang,说明插件根本没加载语法定义
Ctrl+B 编译失败但没错误提示,怎么定位问题?
Sublime 构建系统默认静默失败,stderr 不输出,erlc 即使因 BOM、路径错或权限不足退出,你也只看到“构建完成”或空白面板。关键不是改 JSON,而是让错误浮出来。
- 确保
.erl文件保存为UTF-8 without BOM(BOM 会导致erlc解析失败且不报行号) - 在构建系统中显式加
"shell": true,并把"cmd"改成 shell 命令串:["sh", "-c", "erlc '$file' 2>&1 || echo '--- COMPILATION FAILED ---'"] - 检查
"working_dir": "$file_path"是否设置——缺了这句,erlc找不到同目录下的.hrl或把.beam生成到奇怪位置 - Windows 用户若用 WSL,别在 Sublime 里调用 Windows 版
erlc.exe,而应配 WSL 路径:["wsl", "erlc", "$file"]
怎么让 Ctrl+Click 跳转到 -include 的 .hrl 文件?
Sublime 默认不解析 Erlang 的 -include、-define 或模块导出,跳转失效不是配置问题,是语法层面没索引能力。目前唯一可靠方案是用 Erlang-sublime 插件(注意:这不是官方 Erlang 插件),但它只在 Linux/macOS 下稳定,且要求头文件路径必须相对当前文件可算出。
- 安装
Erlang-sublime后,重启 Sublime,打开.erl文件,把光标停在-include("xxx.hrl").的xxx.hrl上,按Ctrl+Click - 跳转失败常见原因:
xxx.hrl不在$file_path或其子目录中;文件名含大写但实际是小写(macOS/Linux 区分大小写);路径用了../但插件不支持向上跨级 - 替代方案:放弃跳转,用
Ctrl+P快速打开文件,或在终端执行grep -r "some_macro" include/定位
真正卡住 Erlang 分布式开发的,从来不是 Sublime 配置——而是你没在终端里跑通 erl -name a@127.0.0.1 -setcookie abc 和 erl -name b@127.0.0.1 -setcookie abc,再互相 net_adm:ping('a@127.0.0.1'). Sublime 只负责让你少打错一个 -spec 括号,别的得自己进 shell 里敲。











