必须先让右下角显示“elixir”,否则高亮、lsp、构建全部失效;若显示plain text,说明语法包未加载,需检查packages/elixir/syntaxes/elixir.sublime-syntax是否存在或手动设置语法。

右下角没显示“Elixir”,所有功能都卡死
Sublime Text 里写 Elixir 路由代码,第一道门槛不是语法、不是 LSP,而是右下角是否显示 Elixir。如果显示 Plain Text 或 HTML,那高亮、构建、LSP 全部失效——你写的 defmodule Router do 就是一堆灰字,连括号匹配都崩了。
确认方式很简单:打开任意 .ex 或 .exs 文件,看右下角;点它 → 若菜单里没有 Elixir,说明 Packages/Elixir/Syntaxes/Elixir.sublime-syntax 根本没加载成功。
- 用
Preferences → Browse Packages…进入目录,检查是否存在Elixir/文件夹,且内含Syntaxes/Elixir.sublime-syntax - 别装
Phoenix-Sublime想“覆盖”基础支持——它不认.ex,反而可能把.ex错判成Elixir (EEx) - 手动触发:
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(macOS)→ 输入Set Syntax: Elixir,前提是插件已安装且路径正确
构建系统跑不起来?多半是 working_dir 和 shell 冲突
想快速验证一个路由模块(比如 lib/router.ex),用构建系统直接跑 elixir $file 是最直觉的做法,但容易失败。常见报错如 ** (CompileError) ... undefined function plug/2,本质不是缺依赖,而是工作目录错了。
关键点:Elixir 路由通常依赖 plug、phoenix 等包,这些必须从 mix.exs 所在目录加载。单文件运行时若 working_dir 不指向项目根,elixir 就找不到 _build 和 deps。
- 对单文件调试,用
"working_dir": "$file_path"只适用于无依赖的脚本;路由文件必须配"working_dir": "$project_path" -
"shell": true在 Sublime 构建中禁用——它会破坏路径变量解析,尤其在 Windows 下导致$project_path展开失败 - 推荐构建配置片段:
{ "cmd": ["mix", "run", "--no-start", "-e", "require \"lib/router.ex\""], "file_patterns": ["*.ex"], "selector": "source.elixir", "working_dir": "$project_path" }
LSP 不跳转?先查 elixir-ls 是否真启动了
写完 get "/api/users", UsersController, :index 后按住 Ctrl 点 UsersController 却没反应,不是 LSP 插件没装,而是 elixir-ls 进程压根没起来。它不是插件,是独立二进制,得手动部署、手动验证。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
SublimeLSP 只负责转发请求,elixir-ls 才真正解析 AST、提供跳转。旧版 Sublime Text(build client stopped unexpectedly。
- 终端执行
language_server.sh --version(macOS/Linux)或language_server.bat --version(Windows),必须输出类似ElixirLS v0.116.0 - 在
Preferences → Package Settings → LSP → Servers → LSP-elixir的用户设置中,command必须填绝对路径,例如["/opt/elixir-ls/release/language_server.sh"] -
syntaxes字段必须严格匹配你当前激活的语法路径,常见值是["Packages/ElixirSyntax/Elixir.sublime-syntax"],不是Elixir插件的路径
并发路由调试时,日志和进程树比断点更管用
Elixir 的高并发路由(比如用 Plug.Cowboy 或 Phoenix.Endpoint)本质是 BEAM 上一堆轻量进程协作,Sublime 没有传统 IDE 那种线程级断点。靠打印或 LSP hover 查变量,远不如直接看进程树和日志高效。
你写的 plug :fetch_query_params 被哪个进程调用?spawn_link 启的子进程在哪?这些信息不在编辑器里,而在终端和 BEAM 运行时。
- 加日志别只用
IO.puts,改用Logger.info("[Router] #{inspect(self())} handling #{conn.method}"),能看清每个请求跑在哪个 PID - 启动服务后,在另一终端运行
mix phx.server或mix run --no-halt,再执行iex -S mix→ 输入:observer.start(),实时看进程数、消息队列、内存占用 - LSP 的 “Go to Definition” 对宏(如
get,post)常失效——它们是编译期展开的,实际跳转目标得查Plug.Router或Phoenix.Router源码,不是你本地文件
Elixir 路由的并发性藏在 BEAM 层,Sublime 只是前端界面。语法识别不准、构建路径错、LSP 二进制没跑起来——这三个点卡住,后面所有“高并发”都只是纸上谈兵。










