VSCode本身不运行Elixir代码,仅通过ElixirLS调用本地elixir和mix命令;需在集成终端验证elixir≥1.14、erl≥25.0、mix.exs存在且已执行mix deps.get,调试必须配置type: "mix_task",仅保留pguyot.erlang和elixir-lsp.elixir-ls扩展。

VSCode 本身不运行 Elixir 代码,它只通过 ElixirLS 调用你本地已安装的 elixir 和 mix 命令来编译、测试或启动任务——所以“运行代码”本质是配置好环境后触发 mix 任务。
elixir --version 和 erl -version 在 VSCode 终端里必须能跑通
很多人卡在“点运行没反应”,其实是 VSCode 没继承 shell 的 PATH。系统终端能跑 ≠ VSCode 内置终端能跑。
- 打开 VSCode,按
Ctrl+`调出集成终端 - 执行
elixir --version→ 必须输出 ≥1.14 的版本号 - 执行
erl -version→ 必须输出 ≥25.0 的 OTP 版本(如Erlang/OTP 26) - 执行
which elixir和which erl→ 两者都得返回真实路径,不能是command not found - Mac 用户用
asdf:检查asdf current erlang和asdf current elixir是否生效;Windows 用户注意 PowerShell 下是否把erl.exe所在目录加进了$env:PATH
项目根目录必须有 mix.exs,且已执行 mix deps.get
ElixirLS 不是全局语言服务,它只在检测到 mix.exs 的目录里才拉起完整服务器。没有它,连语法高亮都可能降级。
- 别用 VSCode 打开
lib/或test/子目录——必须cd到含mix.exs的根目录,再执行code . - 新建项目请用
mix new my_app,别手动建空文件夹写mix.exs—— 缺.formatter.exs或config/结构会导致mix format失败 - Umbrella 或 Phoenix 项目,必须打开顶层根目录(含顶层
mix.exs),不是某个apps/my_app子目录 - 执行过
mix deps.get才算真正就位;否则ElixirLS卡在 “Starting ElixirLS…”,去Output → ElixirLS面板看第一行报错,大概率是依赖缺失或config/config.exs语法错
调试必须用 type: "mix_task",不能直接运行 .ex 文件
Elixir 没有“单文件运行”概念,所有可执行入口都是 mix 任务。VSCode 的调试器只认 type: "mix_task" 配置。
- 在项目根目录下创建
.vscode/launch.json,内容至少包含:
{
"version": "0.2.0",
"configurations": [
{
"type": "mix_task",
"name": "mix test",
"request": "launch",
"task": "test",
"taskArgs": ["--trace"]
}
]
}
task 字段必须是合法 mix 子命令(如 test、phx.server、run),不能填 lib/my_module.ex
lib/ 和 test/ 下生效;mix.exs 或 config/ 里打断点不会命中.eex 和 .leex 文件关联为 elixir 类型,否则模板里无法跳转或补全只保留 pguyot.erlang 和 elixir-lsp.elixir-ls 两个扩展
第三方打包版或名字近似的插件(比如 “Elixir for VSCode”)往往硬编码旧路径、不支持调试、甚至和官方 ElixirLS 冲突。
- Erlang 支持:只装
pguyot.erlang(图标是黄色齿轮,作者 pguyot) - Elixir 支持:只装
elixir-lsp.elixir-ls(GitHub 仓库elixir-lsp/elixir-ls,作者 Jake Beacher) - 装完必须重启 VSCode;首次打开
.ex文件时若弹出“允许运行未签名的扩展”,务必点Allow,否则进程被拦截,状态栏显示ElixirLS: not connected - 别同时启用
erlang-ls或旧版vs-elixir,冲突会导致跳转失效、hover 不出类型
最容易被忽略的是:VSCode 启动上下文和项目结构绑定极紧。哪怕 elixir 和 erl 版本都对,只要打开方式不对(比如从子目录启动)、mix.exs 缺失或 mix deps.get 没跑,整个语言服务就只是个空壳。


















