VSCode本身不运行Erlang/Elixir,仅集成本地erl/elixir和语言服务器;配置失败90%因终端中erl或elixir命令不可用,须在VSCode内置终端验证which erl/elixir、erl -version(≥25.0)、elixir --version(≥1.14)及crypto:start(),并只装pguyot.erlang和elixir-lsp.elixir-ls插件,重启后确保mix.exs存在且已执行mix deps.get。

VSCode 本身不运行 Erlang/Elixir,也不“开启”并发或分布式能力——它只是把本地已装好的 erl、elixir 和语言服务器“接进来”,让你看清进程树、设断点、观察消息收发。配置失败的根源,90% 是终端里 erl 或 elixir 命令根本跑不通,而不是插件没选对。
确认 erl 和 elixir 在 VSCode 终端里真能用
别只在系统终端验证;必须打开 VSCode 内置终端(Ctrl+`),执行:
-
which erl和which elixir都得返回路径,不能是command not found -
erl -eval 'crypto:start(). halt().' -noshell必须静默退出;报undefined function crypto:start/0说明 OTP 缺核心应用,得重装 - Mac 用户用
asdf时,asdf current erlang和asdf current elixir输出的版本要和erl -version/elixir --version一致 - Windows 用户注意:VSCode 默认启动 PowerShell 或 Git Bash,不是 CMD;
erl.exe路径不能含中文或空格
只装这两个扩展:pguyot.erlang 和 elixir-lsp.elixir-ls
其他名字相近的“Erlang Tools”“Elixir for VSCode”基本已废弃,不支持调试、跳转失效、甚至硬编码旧路径:
- 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,且已跑过 mix deps.get
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,并手动设置files.associations把*.eex关联到eex语言模式
调试分布式节点必须用 type: "erlang",禁用 mix_task
用 type: "mix_task" 启动 phx.server 或 run 时,ElixirLS 默认以单节点、无名方式运行,Node.self() 返回 :nonode@nohost,所有 Node.connect/1 静默失败:
- 要调试多节点协作?必须用
erlang-ls的type: "erlang"配置,在.vscode/launch.json中填"node": "test@127.0.0.1"、"setcookie": "abc" -
startFun推荐设为"application:start",startArgs设为"[myapp]",避免 mix 启动逻辑干扰分布式上下文 - 若必须从 Mix 启动,可在
config/runtime.exs中强制设置:System.put_env("ELIXIR_ERL_OPTIONS", "-name myapp@127.0.0.1 -setcookie abc") - 启动后,调试侧边栏会出现
Processes、Ports标签页,点击进程才能看到实时收发消息队列——这才是真正的并发可视化
真正容易被忽略的是:VSCode 从不参与节点启动,erl -name 和 -setcookie 的一致性、主机名解析、防火墙放行 EPMD 端口(4369)和分布式端口段(9000–9100),这些全靠你手动验证;VSCode 只负责把它们“画出来”。



















