ElixirLS 启动失败、Phoenix 模板无高亮、断点不命中,根本原因是底层环境或配置未对齐项目上下文:erl/elixir 命令不可用或版本过低;.eex/.leex 文件未正确关联为 Elixir 类型;调试需用 phx.server 而非 mix run,且 projectDir 必须指向含 mix.exs 的根目录。

ElixirLS 启动失败,Phoenix 模板没高亮,断点不命中——根本原因不是插件装得不对,而是底层环境或配置没对齐项目上下文。
elixirLS 启动失败:先查 erl 和 elixir 命令是否真可用
VSCode 里的 ElixirLS 是个“语言服务器”,它本身不带 Erlang/OTP 或 Elixir 运行时。一旦 erl 或 elixir 在终端里执行报错、版本过低、或路径被 asdf / chruby 等版本管理器遮蔽,ElixirLS 就会卡在 “Starting…” 状态,Output 面板里显示 Failed to start language server。
- 必须在终端运行
erl -version和elixir --version,两者都输出有效版本(Erlang ≥ 25.0,Elixir ≥ 1.14) - Mac Apple Silicon 用户用 Homebrew 安装后,PATH 通常为
/opt/homebrew/bin;若用 asdf,请确认当前 shell 已asdf local erlang 15.0+asdf local elixir 1.17-otp-25 - Windows 用户用 Chocolatey 安装时,注意
choco install erlang后命令是erl,不是werl;elixir包会自动把mix加进 PATH,缺任意一个都会导致启动失败
Phoenix 模板文件(.eex/.leex)不识别为 Elixir 代码
VSCode 默认把 .eex 当 HTML 处理,结果嵌入式表达式 不高亮、跳转失效、无法格式化。这不是插件问题,是文件类型绑定没改。
- 按
Cmd+Shift+P→ 输入并选择Preferences: Configure File Association - 依次输入:
*.eex→ 选elixir;*.leex→ 选elixir;*.html.eex→ 选elixir - 关掉再重开一个
.eex文件,左下角状态栏必须显示Elixir,不是HTML或Plain Text - 如果仍无效,检查工作区 settings.json 是否有冲突项,比如
"files.associations"里硬编码了"*.eex": "html"
launch.json 调试配置不生效:mix_task 类型必须匹配 Phoenix 启动方式
直接复制网上旧模板容易出问题。Phoenix 项目不能靠 mix run 启动调试,必须用 phx.server,且需显式指定 projectDir 和环境变量,否则断点永远不触发。
- 按
Cmd+Shift+P→Debug: Open launch.json→ 选Elixir环境生成基础模板 - 替换为以下内容(注意
projectDir必须是当前工作区根路径,不是子目录):
{
"version": "0.2.0",
"configurations": [
{
"type": "mix_task",
"name": "phx.server",
"request": "launch",
"projectDir": "${workspaceFolder}",
"task": "phx.server",
"taskArgs": [],
"env": {
"MIX_ENV": "dev"
}
}
]
}
- 确保项目根目录存在
mix.exs且已执行过mix deps.get,否则 ElixirLS 无法加载依赖上下文,调试器找不到模块定义 - 断点只对
.ex文件内函数体生效,.eex模板里设断点无效(可改用IO.inspect/1或在 controller action 里打断点)
mix formatOnSave 不起作用:检查项目级配置和文件扩展名
很多人开了 elixir.formatOnSave 却发现保存后没格式化,常见原因是 VSCode 没识别当前文件属于 Elixir 项目,或者文件后缀不被 mix format 支持。
- 确保当前打开的文件路径在含
mix.exs的目录下(即${workspaceFolder}),否则 VSCode 不启用项目级设置 - 只对
.ex、.exs文件生效;.eex和.leex不支持自动格式化(Phoenix 官方也不推荐在模板里写复杂逻辑) - 若仍无效,手动运行
mix format看终端是否报错,常见原因是.formatter.exs缺失或mix.exs中未声明format: [...]配置段 - 可临时加一行到 settings.json 强制启用:
"[elixir]": { "editor.formatOnSave": true }
最常被忽略的是:ElixirLS 启动依赖 mix.exs 存在且能成功解析——哪怕只是语法错误,也会让整个语言服务静默失败,连错误提示都不弹。别急着重装插件,先看 Output → ElixirLS 面板第一行日志。



















