crystal cli 在 sublime 中不可用的根源是其不继承 shell 环境,导致 path 中的 crystal 命令无法被识别;需确认 which crystal 和 crystal --version 在系统终端与 sublime 控制台中结果一致,macos m 系列用户应显式配置 /opt/homebrew/bin/crystal,windows 用户推荐 wsl2 + ubuntu;仅安装官方 crystal language support 插件,卸载 ruby 相关插件;必须在项目根目录创建 .crystalconfig 文件启用 lsp 功能;sublimelsp 的 "command" 必须设为绝对路径数组如 ["/opt/homebrew/bin/crystal", "tool", "lsp"]。

Crystal CLI 必须在 Sublime 内置终端里可用
VSCode 里 Crystal 插件失效的根源,90% 是 crystal --version 在 VSCode 终端里报 command not found。Sublime Text 同样如此——它不继承你的 shell 环境,哪怕 which crystal 在 iTerm 里输出完美,Sublime 控制台(Ctrl+`)里照样找不到。
- 先在系统终端运行
which crystal和crystal --version,确认版本 ≥ 1.12.0 - 再在 Sublime 的控制台里执行相同命令,结果必须一致;若失败,说明 shell 初始化缺失
- macOS M 系列用户常见路径是
/opt/homebrew/bin/crystal,需显式写死,不能依赖 PATH - Windows 用户别折腾原生环境,WSL2 + Ubuntu 是唯一可行路径
只装官方 Crystal Language Support 插件
社区存在多个 Crystal 扩展,但只有作者为 crystal-lang 的那个支持 LSP、无需额外配 scry,其他插件会劫持 .cr 文件识别,导致语法高亮错乱或补全失效。
- 卸载所有 Ruby 相关插件:尤其是
Solargraph、ruby-solargraph、rebornix.ruby - 安装后重启 Sublime,打开任意
.cr文件,右下角状态栏应显示Crystal (via LSP),不是Crystal或Ruby - 别装
Crystal Tools或Crystal Language Server—— 它们已废弃,与当前 LSP 协议不兼容
.crystalconfig 是补全和类型提示的开关
没这个文件,String. 后不会弹出 upcase、split 等方法链,悬停也看不到类型签名。它不是可选配置,而是 LSP 功能启用的必要条件。
- 在项目根目录新建文件,命名为
.crystalconfig(注意开头是点,无后缀) - 内容仅一行合法 JSON:
{"lsp": true, "auto-reload": true} - 该文件必须存在且可读,否则 SublimeLSP 会降级为纯文本模式,补全退化为词频匹配
SublimeLSP 配置要指向真实 crystal tool lsp 路径
SublimeLSP 不自带语言服务器,它只转发请求。如果 "command" 字段只写 ["crystal", "tool", "lsp"],而没确认该命令在 Sublime 进程环境中可达,就会静默失败——控制台不报错,但补全永远不出现。
- 在 Sublime 控制台运行
import os; print(os.environ.get('PATH')),确认输出包含crystal所在路径 - LSP.sublime-settings 中,
"command"应为绝对路径数组,例如:["/opt/homebrew/bin/crystal", "tool", "lsp"] - 不要省略
"crystal"命令前缀——直接写["/opt/homebrew/bin/crystal-tool-lsp"]是错的,不存在这个可执行文件











