核心是先确保右下角显示“Elixir”,再配置构建系统和elixir-ls;若显示Plain Text则语法未识别,高亮、LSP、构建均失效。

Sublime Text 要正确高亮 Elixir 代码并支持基础开发,核心不是装一堆插件,而是先让 source.elixir 语法被识别、再让构建和 LSP 各司其职——否则你看到的只是“彩色文本”,不是“可跳转、可检查、可运行”的 Elixir 环境。
怎么确认当前文件真正在用 Elixir 语法?
右下角显示的语法名称不是摆设。如果打开 .ex 文件却显示 Plain Text 或 HTML,后续所有高亮、LSP、构建都会失效。
- 点击右下角语法名(如
Plain Text),从弹出菜单中选Elixir;若没有,说明没装语法包 - 通过
Ctrl+Shift+P→ 输入Set Syntax: Elixir手动触发(需已安装Elixir插件) - 检查
Packages/Elixir/Syntaxes/Elixir.sublime-syntax是否存在:用Preferences → Browse Packages…进入目录确认 - 如果装了
Phoenix-Sublime,它会覆盖部分语法定义,但不提供基础.ex支持——别指望它替代Elixir插件
为什么装了 Elixir 插件还是没高亮?
常见原因是语法包没生效,或被其他插件干扰。Sublime 不按后缀自动绑定语法,必须显式注册扩展名。
- 在
Packages/User/下新建Elixir.sublime-settings,内容为:{ "extensions": ["ex", "exs"] } - 不要改
Packages/Elixir/下的原始文件——升级会覆盖;User/目录下的设置优先级更高 - 如果右下角显示
Elixir (EEx)却编辑的是.ex文件,说明文件被错误识别为模板——这是Phoenix-Sublime的副作用,临时解决:右键 →Open all with current extension as… → Elixir -
highlight_line和主题无关:即使高亮开了,若配色方案里没定义lineHighlight规则,当前行依然不显色
构建系统怎么写才真正能跑 mix 项目?
单文件 elixir $file 只适合脚本,对 Phoenix 或普通 mix 项目完全无效——它压根不加载依赖、不识别 config/、不启动应用上下文。
- 创建新构建系统(
Tools → Build System → New Build System),内容如下:{ "cmd": ["mix", "run", "--no-halt"], "working_dir": "$project_path", "selector": "source.elixir", "file_regex": "^(.*):([0-9]+):([0-9]+): (.*)$" } -
$project_path必须指向含mix.exs的根目录;若没开项目,$project_path为空,命令会失败 - 别用
shell: true:它会让 Sublime 在 shell 环境下执行,但无法捕获mix的实时输出流,日志断掉就看不到错误堆栈 - 想跑测试?换
"cmd": ["mix", "test", "$file"],并确保光标在测试文件内,否则$file为空
elixir-ls 启动失败的三个硬性条件
SublimeLSP 不是“装上就灵”,elixir-ls 是个独立进程,启动失败时通常静默退出,只留下“没跳转、没补全”的假象。
-
command字段必须是绝对路径,且language_server.sh(macOS/Linux)或language_server.bat(Windows)有可执行权限;~或$HOME会被忽略 -
syntaxes数组里的路径必须和你实际安装的 Elixir 语法包完全一致;比如你用 Package Control 装的是ElixirSyntax,那路径就得是Packages/ElixirSyntax/syntaxes/Elixir.sublime-syntax,不是官方那个 -
initializationOptions.env.MIX_ENV如果设成test,但项目里没config/test.exs,elixir-ls会在初始化阶段崩溃退出,日志里只显示connection closed
最常被忽略的一点:首次启动 elixir-ls 会自动 mix deps.get 并编译整个项目依赖,耗时 1–3 分钟。期间 Sublime 底部状态栏可能一直显示 “Starting elixir…”——这不是卡死,别关掉重试。等它完成一次,后续才真正快起来。















