sublime text 无法直接运行 erlang 文件,需通过 build system 调用 erlc 和 erl;必须配置绝对路径、正确 working_dir 和 source.erlang selector,并避免中文路径、空格及模块名与文件名不一致。

Sublime Text 里根本不能“直接运行” Erlang 文件
Sublime Text 本身不是 IDE,没有内置 Erlang 运行时或编译器集成。所谓“运行”,实际是调用系统命令 erlc 编译 + erl 启动,靠的是 Build System 配置。如果点 Ctrl+B 没反应、报错或只输出乱码,大概率是路径、工作目录或 shell 环境没对上。
Build System 配置必须指定 erlc 和 erl 的绝对路径
Windows/macOS/Linux 下,Sublime 默认找不到 erlc,尤其当你用 asdf、kerl 或手动编译安装 Erlang 时。PATH 环境变量在 GUI 应用(如 Sublime)里往往不继承终端的配置,所以不能写 "cmd": ["erlc", "$file_name"] —— 它会直接报 Unable to find command erlc。
实操建议:
- 先在终端运行
which erlc(macOS/Linux)或where erlc(Windows),拿到完整路径,比如/usr/local/bin/erlc或C:\Program Files\erl-25.3\bin\erlc.bat - 新建 Build System(
Tools → Build System → New Build System),填入类似内容:
{
"cmd": ["/usr/local/bin/erlc", "$file"],
"file_regex": "^(.+):([0-9]+):([0-9]+):.*$",
"working_dir": "$file_path",
"selector": "source.erlang"
}
注意:$file 是带路径的完整文件名,$file_name 只是名字(如 test.erl),编译时必须用前者;working_dir 设为 $file_path 才能正确解析模块依赖和 -pa 路径。
编译成功后怎么在 Sublime 里启动 Erlang shell 并加载模块
Build System 只负责编译,不会自动进 erl。想测试函数,得手动开终端执行 erl -pa . -sname test,再敲 m(your_module). —— 但很多人希望一键完成“编译+加载+进入 shell”。可行但有坑:
- 不能把
erl加进 Build System 的cmd,否则 Sublime 会卡住(它等命令退出,而erl是交互式进程) - 更现实的做法:用
shell_cmd启动后台 shell(仅限 macOS/Linux),例如"shell_cmd": "osascript -e 'tell app \"Terminal\" to do script \"cd $file_path && erl -pa . -sname subl\"'" - Windows 上可用
start cmd /k erl -pa %CD% -sname subl,但要注意%CD%在 Build System 里不展开,得写死路径或改用插件
简单场景下,推荐放弃“一键进 shell”,老实用终端——Erlang 开发中频繁切换模块、重载、查进程,GUI 自动化反而限制多。
常见错误:中文路径、空格、模块名不匹配
这三个问题占 Erlang Sublime 编译失败的 70% 以上:
-
erlc对含中文或空格的$file_path处理极差,会报no file found或静默失败。务必把项目移到纯英文无空格路径下,比如/Users/me/erl_demo - Erlang 源文件名必须和模块名一致,且首字母大写。写
-module(hello).就必须保存为Hello.erl,否则erlc Hello.erl生成的是hello.beam,但m(hello).会报module hello could not be loaded - Sublime 的
selector必须设成"source.erlang",否则 Build System 不会出现在菜单里;确保已安装 Erlang 插件(如 “Erlang” by svenvc),否则语法高亮和 scope 都不对
真正麻烦的从来不是配置本身,而是 Erlang 对路径、命名、工作目录的强约束和 Sublime 对 shell 环境的弱继承——这两者叠在一起,错一个字符就白忙十分钟。










