VSCode本身不运行Erlang或Elixir,仅通过插件集成本地erl、rebar3、elixir和mix;配置失败主因是VSCode终端无法调用这些命令——需在集成终端中实测which erl/elixir等是否返回路径,并确保crypto应用完整、mix.exs存在、插件仅选pguyot.erlang和elixir-lsp.elixir-ls。

VSCode 本身不运行 Erlang 或 Elixir,它只靠插件“接”本地已装好的 erl、rebar3、elixir 和 mix。配置失败的绝大多数情况,不是插件没装对,而是终端能跑的命令,在 VSCode 里跑不了——路径没继承、版本太旧、或 mix.exs 缺失。
确认 erl、rebar3、elixir 在 VSCode 终端里真能用
别只在系统终端验证;必须在 VSCode 集成终端(Ctrl+`)里执行:
-
which erl和which rebar3(Erlang 项目)或which elixir和which mix(Elixir 项目)——全部得返回具体路径,不能是command not found -
erl -eval 'crypto:start(). halt().' -noshell必须静默退出;若报undefined function crypto:start/0,说明 Erlang 安装缺 crypto 应用,得重装 OTP - Mac 用户用
asdf管理多版本时,确保asdf current erlang和asdf current elixir输出的是你期望的版本,且$PATH中对应bin目录排在前面 - Windows 用户注意:VSCode 默认启动 PowerShell 或 Git Bash,不是 CMD;
rebar3.bat要放在 Erlangbin/下,且内容含escript.exe调用逻辑
只装这两个扩展:pguyot.erlang 和 elixir-lsp.elixir-ls
第三方打包版或名字近似的“Elixir for VSCode”“Erlang Tools”等,基本不维护、不支持调试、甚至硬编码旧路径。必须认准:
- Erlang:搜索
Erlang,只装发布者为pguyot的那个(图标是黄色齿轮) - Elixir:搜索
ElixirLS,只装 GitHub 仓库为elixir-lsp/elixir-ls、作者是Jake Beacher的那个 - 装完必须重启 VSCode;首次打开
.erl或.ex文件时,若弹出“允许运行未签名的扩展”,点 允许,否则进程被拦截,状态栏显示ElixirLS: not connected - 别同时启用
erlang-ls或旧版vs-elixir,冲突会导致跳转失效、hover 不出类型
mix.exs 是 ElixirLS 的开关,不是可选项
ElixirLS 不是全局生效的。它只在检测到项目根目录存在 mix.exs 的文件夹里才启动完整服务。没有它,补全、跳转、错误提示都会降级或完全失效。
- 子目录打开
.ex文件,但上层没有mix.exs?功能直接残废 - 有
mix.exs但mix deps.get没跑过?ElixirLS 卡在Starting ElixirLS…,去 Output → ElixirLS 面板看第一行报错,大概率是依赖缺失或config/config.exs语法错 - Phoenix 项目还需额外装
Phoenix Framework Snippets和EEx Language Support,并手动在设置里加"*.eex": "eex"关联,否则模板文件无高亮、无补全
调试前必须配对节点名和 cookie
VSCode 调试 Elixir 不是“点一下就进断点”,而是 attach 到一个已启动的 BEAM 节点。断点只在已加载的模块里生效,且节点名、cookie、端口三者必须严丝合缝。
- 启动调试节点示例:
iex --name debug@localhost --cookie my_cookie -S mix(注意:@localhost不能省,my_cookie要记牢) -
.vscode/launch.json中的"cookie"、"hostName"、"port"(默认4700)必须和启动命令一致 - 断点只在
lib/和test/下生效;src/(Erlang)或priv/里的代码不会被语言服务器索引 - 调试完务必在 IEx 里执行
:init.stop()或关掉终端,否则下次调试可能连不上——BEAM 节点还在后台占着端口和 cookie
最容易被忽略的是:VSCode 集成终端的 PATH 和你日常用的 shell 不一定一致,尤其是用了 asdf、kiex 或自定义 shims 的用户。别信“我终端里能跑”,一定要在 VSCode 里 Ctrl+` 实测。环境没对齐,后面所有配置都是空中楼阁。


















