sublime text 支持 crystal 需确保 crystal cli 在系统及 sublime 内置终端中均可调用(路径一致、版本 ≥1.12.0),再配置 crystal 语法包、crystal.sublime-build 构建系统、lsp-crystal 客户端(command 为 ["crystal", "tool", "lsp"]),并禁用 ruby 插件以防 .cr 文件被误识别为 ruby。

Sublime Text 本身不原生支持 Crystal,但只要 crystal CLI 在系统中可用、且能被 Sublime 正确调用,就能实现基础的语法高亮、构建运行和 LSP 补全——关键不是装多少插件,而是让 crystal 命令在 Sublime 内置终端里和系统终端里表现一致。
确认 crystal CLI 是否真正就绪
VSCode 的 Crystal 插件依赖 crystal tool lsp,Sublime 同样绕不开它。LSP 功能(补全、跳转、悬停)必须基于本地可执行的 crystal 二进制,而非任何“包装器”或别名。
- 在系统终端(非 Sublime)运行
which crystal和crystal --version,确保输出路径有效、版本 ≥ 1.12.0 - 在 Sublime 中按
Ctrl+`打开内置终端,重复执行这两条命令;若报command not found或路径指向/usr/bin/crystal(尤其 macOS M 系列),说明 shell 初始化文件(如~/.zshrc)未被 Sublime 加载 - Mac 用户常见解法:在 Sublime 的
Preferences > Settings – User中显式指定:{"shell_cmd": "zsh -l -c \"crystal tool lsp\""}或直接设置环境变量路径(见下一条)
配置 Sublime 的 Crystal 构建系统(crystal.sublime-build)
构建系统决定 Ctrl+B 能否编译并运行 .cr 文件。Crystal 不像 Python 那样有标准 python -m 模式,必须直调 crystal run 或 crystal build。
- 新建文件 → 保存为
Packages/User/crystal.sublime-build(路径必须准确) - 内容示例(适配 Linux/macOS):
{ "cmd": ["crystal", "run", "$file"], "file_regex": "^(.*?):([0-9]+):([0-9]+): (error|warning|note): (.*)$", "working_dir": "$file_path", "selector": "source.crystal", "encoding": "UTF-8" } - Windows 用户需改用
cmd /c crystal run "$file"并设"shell": true;若用 WSL2,建议统一在 WSL 终端中启动 Sublime(subl命令),避免路径映射问题 - 务必检查
"selector": "source.crystal"—— 这依赖于 Crystal 语法包是否激活;若没高亮,先装官方Crystal语法包(非插件,是 syntax definition)
启用 LSP 支持补全与类型提示
Sublime 的 LSP 插件(LSP + LSP-Crystal)需要手动桥接 crystal tool lsp,不能靠自动发现。
- 确保已安装
LSP和LSP-Crystal(后者是社区维护的适配器,非官方,但当前唯一稳定支持 Crystal 的 Sublime LSP 客户端) - 在
Preferences > Package Settings > LSP > Settings中添加:{ "clients": { "crystal": { "enabled": true, "command": ["crystal", "tool", "lsp"], "scopes": ["source.crystal"], "syntaxes": ["Packages/Crystal/Crystal.sublime-syntax"], "languageId": "crystal" } } } -
"syntaxes"必须与你实际安装的 Crystal 语法包路径一致;若用的是Crystal Syntax插件,路径可能是Packages/Crystal Syntax/Crystal.sublime-syntax - 重启 Sublime 后,打开
.cr文件,状态栏应显示LSP: crystal;若显示LSP: disabled,检查crystal tool lsp是否能在 Sublime 终端中无错启动
避免 Ruby 插件劫持 .cr 文件识别
Crystal 和 Ruby 共享部分语法特征,Sublime 默认可能把 .cr 当作 Ruby 处理——此时所有 Crystal 特性都会失效。
- 禁用所有 Ruby 相关插件:
Solargraph、ruby-solargraph、rebornix.ruby,哪怕你同时写 Ruby - 打开任意
.cr文件后,右下角语言标识应为Crystal(不是Ruby);若不对,点击该标识 →Open all with current extension as…→ 选Crystal - 为防复发,可在
Preferences > Settings – User中加一行:"extensions_exclude_patterns": ["*.rb"]
(仅当 Ruby 插件仍干扰时临时使用)
Crystal 在 Sublime 里最脆弱的环节从来不是插件功能,而是 crystal 命令的路径可见性——它必须在 Sublime 启动时就加载完整的 shell 环境,否则 LSP 启动失败、构建报 command not found、甚至语法高亮都加载不出来。这点比 Python 或 C++ 配置更敏感,因为 Crystal 的工具链尚未像主流语言那样深度适配编辑器沙箱。











