elixir中ctrl+p+@失效需先ctrl+p再输@后按空格或回车激活elixirls符号搜索;多光标编辑对模式匹配安全但须避guard clause;调试otp进程树应绑定erlang.processtree.focusnext/previous快捷键;livebook中ctrl+enter卡顿常因未显式加载.livemd文件或依赖未require。

Ctrl+P + @ 符号跳转在 Elixir 模块中失效怎么办
VS Code 默认的 Ctrl+P + @ 是为 TypeScript/JavaScript 设计的符号搜索逻辑,ElixirLS 插件虽支持符号索引,但不会自动注册 @ 前缀触发器。直接输 @foo 会返回“no symbols found”。
- 正确做法是先按
Ctrl+P,输入@后立刻敲空格或回车——这会激活 ElixirLS 的符号搜索面板,再输入函数名(如start_link)即可匹配模块内所有同名函数 - 若仍无结果,检查
elixirLS.trace.server是否设为verbose,终端里看是否有Could not find module报错;常见原因是项目未运行mix deps.get或_build目录权限异常 - 不要依赖
Ctrl+Shift+O:它只搜当前文件,而 Elixir 的行为函数(如GenServer.start_link/2)定义在 OTP 库里,必须用跨文件符号跳转
多光标编辑对 Elixir 模式匹配(pattern matching)批量重构是否安全
安全,但有约束条件。Elixir 的 = 不是赋值而是匹配操作,Ctrl+D 或 Ctrl+Shift+L 批量改变量名时,容易误触 {a, b} = tuple 这类结构里的原子或变量。
- 优先用
Ctrl+F2(选中当前词所有出现位置):它只匹配完整单词边界,不会把state和state_machine混为一谈 - 避免在 guard clause 里用
Ctrl+D:比如when is_integer(x) and x > 0中连续按两次Ctrl+D可能选中x和0,导致语法错误 - 改
def函数签名时,用Ctrl+Shift+O定位到函数头,再手动拖选参数列表——Elixir 的参数解构(如[head | tail])无法被通用多光标准确识别
调试 OTP 进程树时如何快速切换焦点到不同节点
erlang-ls 提供的进程树视图默认不绑定快捷键,靠鼠标点选效率极低。实际开发中需手动映射键盘操作。
- 打开快捷键设置:
Ctrl+K Ctrl+S→ 搜索erlang.processTree→ 找到erlang.processTree.focusNext和erlang.processTree.focusPrevious - 分别绑定为
Ctrl+.和Ctrl+,(避开系统级冲突),这样在调试器面板里可连按快速遍历所有活跃进程 - 注意:进程树焦点 ≠ 代码编辑器焦点。切换后需按
Tab才能把光标移进右侧的Messages或State面板,否则快捷键无效 - 如果
erlang.processTree命令未列出,说明 erlang-ls 未成功连接到节点——检查launch.json中node字段是否与erl -sname test启动名一致
Livebook 集成环境下 Ctrl+Enter 执行单元为何常卡住
Livebook 的 VS Code 插件会劫持 Ctrl+Enter,但默认行为是“执行当前 cell”,而非传统意义上的“发送到 REPL”。卡顿通常源于上下文隔离失败。
- 确认当前文件后缀是
.livemd,且已通过Ctrl+Shift+P→Livebook: Open Current File in Livebook显式加载,否则快捷键根本不会触发 Livebook 流程 - 避免在含
require的 cell 里用Ctrl+Enter:Livebook 默认不自动加载依赖模块,需先单独执行require Foocell,再执行业务逻辑 - 卡在 “Connecting to kernel…” 时,不是快捷键问题,而是 Elixir 进程未启动:终端执行
mix phx.server或iex -S mix后再试











