Sublime怎么运行Erlang_Sublime Erlang编译配置【后端】

1次阅读

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

Sublime怎么运行Erlang_Sublime Erlang编译配置【后端】

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/erlcC:Program Fileserl-25.3binerlc.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 环境的弱继承——这两者叠在一起,错一个字符就白忙十分钟。

text=ZqhQzanResources