终端能跑通 scalac 和 scala 是前提,需验证版本、路径,macos/windows 启动方式影响 path,右下角显示“scala”才算语法识别成功,file_regex 必须精准匹配错误格式并配合 2>&1 使用。

终端能跑通 scalac 和 scala 才是前提
Sublime Text 本身不提供 Scala 编译能力,它只调用你系统里已安装的 scalac 和 scala 命令。如果终端里都执行不了,Sublime 里必然失败。
必须逐条验证:
-
scalac -version和scala -version要有输出(如Scala compiler version 2.13.12) -
which scalac和which scala必须返回非空路径(如/usr/local/scala/bin/scalac) - macOS 用户注意:从 Dock 或 Spotlight 启动 Sublime 时,
PATH不会被继承;必须用终端运行open -a "Sublime Text"启动 - Windows 用户检查系统环境变量
Path是否含scala\bin,改完后要彻底退出 Sublime 进程(右键任务栏 → Exit),不能只关窗口
右下角显示 “Scala” 才算语法识别成功
插件装了不代表文件就被识别为 Scala —— Sublime 不会自动“猜”后缀,必须手动绑定或确认激活。
打开一个 .scala 文件后,看右下角状态栏:
- 若显示
Plain Text,点击它 → 选择Scala → Scala(注意是二级菜单,不是Scala (sbt)或Scala (SublimeREPL)) - 若菜单里根本没有
Scala选项,说明插件没装对:通过Package Control: Install Package搜索并安装作者为James Bremner的Scala插件(名称就是Scala,别选ScalaSyntax或sublack) - 安装后必须彻底重启 Sublime(不只是关窗口),否则部分语法定义不会加载
构建系统里 file_regex 写错就无法跳转错误行
Scala 编译错误格式固定为 MyApp.scala:5: error: not found: value x,file_regex 必须精准匹配这个结构,否则双击错误信息不会跳转到对应行。
正确写法是:
"file_regex": "^([^:]+):([0-9]+):(?:[0-9]+):"
关键点:
- 第一组
([^:]+)捕获文件名(如MyApp.scala) - 第二组
([0-9]+)捕获行号(如5) - 第三段列号用
(?:[0-9]+):非捕获组跳过,因为列号后紧跟冒号+空格,不参与跳转 - 千万别抄泛用模板
^.*?:([0-9]+):([0-9]+):—— 它会吞掉文件名,导致双击跳到错误文件 - 必须配合
2>&1使用,例如"shell_cmd": "scalac \"$file\" 2>&1",否则错误在stderr,file_regex根本捕获不到
cmd 和 shell_cmd 的路径与流重定向不能混用
构建系统里选 cmd 还是 shell_cmd,直接影响错误是否可见、能否跳转、类路径是否生效。
差异和实操要点:
- 用
cmd:必须写绝对路径,例如["/usr/local/scala/bin/scalac", "$file"];但默认不捕获stderr,错误不会显示在构建面板里 - 用
shell_cmd:支持命令链和变量展开,更灵活,但必须加2>&1合并错误流,例如"shell_cmd": "/usr/local/scala/bin/scalac \"$file\" 2>&1" -
working_dir必须设为"$file_path",否则import语句因相对路径找不到依赖 - 别把编译和运行塞进同一个构建系统;推荐分设两个:
Scala(只编译)和Scala Run(运行已生成的.class),避免类路径混乱
最容易被忽略的是:macOS 下用 Dock 启动 Sublime 时,PATH 是空的,哪怕你在 ~/.zshrc 里配得再全也没用;而 file_regex 和 2>&1 不配对,就会导致报错信息满屏却点不了——这种问题在写 Spark 或 Flink 脚本时特别耽误事。











