sublime text 不管理 ruby 运行时,仅调用系统 ruby 命令;配置失败主因是 gui 启动不加载 shell 配置(如 ~/.zshrc),导致 path 缺失,而非 ruby 或插件问题。

Sublime Text 本身不管理 Ruby 运行时,它只调用系统已安装的 ruby 命令;配置失败的绝大多数情况,是 Sublime 没读到你的 shell 配置里的 PATH,而不是 Ruby 没装好或插件没选对。
为什么终端能跑 ruby -v,但 Sublime 按 Ctrl+B 报 /bin/sh: ruby: command not found
根本原因是:Sublime GUI 启动时(比如双击图标)不加载 ~/.zshrc 或 ~/.bash_profile,也就读不到你通过 rbenv init 或 rvm use 注入的 PATH。
- Mac 用户可在 Sublime 控制台(
View → Show Console)运行import os; print(os.environ.get('PATH')),检查输出里有没有/opt/homebrew/bin(Apple Silicon)或~/.rbenv/shims(需写成绝对路径,如/Users/xxx/.rbenv/shims) - Windows 用户要确认
ruby.exe所在目录(如C:Ruby32-x64in)已加入「系统环境变量」而非仅「用户变量」 - 别指望 Build System 自动继承终端 PATH——它默认走的是系统级最小环境
Build System 怎么配才不会踩坑
Build System 本质是单次执行器,只适合跑 ruby script.rb 这类短命脚本,不适合 rails server 或交互式命令。配错会导致卡死、端口占着不放、无法终止。
- 推荐写法(macOS/Linux,兼容 rbenv/rvm):
{ "shell_cmd": "bash -l -c "ruby '$file'"", "file_regex": "^(*?):([0-9]*):?([0-9]*)", "selector": "source.ruby", "encoding": "utf-8" }其中bash -l -c表示启动登录态 shell,能加载你的~/.zshrc;macOS Catalina+ 默认用 zsh,可把bash换成zsh - Windows 必须写死路径:
"cmd": ["C:\Ruby32-x64\bin\ruby.exe", "$file"],注意双反斜杠转义,且路径不能含空格(否则静默失败) - 别加
path字段试图“补 PATH”——它只影响子进程,不解决 shell 初始化缺失问题 - 文件未保存就按
Ctrl+B?执行的仍是磁盘旧版本;装SaveOnBuild插件可自动保存后构建
如何让 .erb、.ru、.rake 正确高亮和缩进
Sublime 对 Ruby 相关后缀识别松散,尤其非标准扩展名常被当成纯文本,手动绑定语法是最快解法。
- 打开文件 →
View → Syntax → Ruby on Rails → HTML (Rails)(对应.erb)或Ruby(对应.ru、.rake) - 右键编辑区底部的语法名 →
Set Syntax as Default for this Extension,输入erb或ru确认 -
.slim或.haml必须装插件(如Slim或Haml),否则高亮、缩进、折叠全乱;装完要重启 Sublime - 别依赖
Rails插件自动识别模板——它只管跳转,不管语法渲染
要不要在 Sublime 里跑 rails server 或 rails console
不要用 Build System 硬套,也不要碰 SublimeREPL;它不支持 TTY,rails console 会卡在 irb 提示符不动,rails server 会锁死构建面板。
- 开发阶段最稳做法:终端里
cd myapp && rails server,Sublime 只负责写代码 - 真要集成终端:装
Terminus插件(Package Control 可搜),Ctrl+Shift+P → Terminus: Open Default Shell,之后所有命令行为和系统终端完全一致 - 别用
subl .启动 Sublime 就以为万事大吉——如果没提前在终端里rbenv use 3.2.2,Terminus里跑的仍是默认 Ruby 版本
最易被忽略的一点:Sublime 的 Build System 和插件都假设你已正确配置了 shell 环境;如果 which ruby 和 which rails 在终端里指向不同路径(比如一个是 shims,一个是系统自带),那任何 Build 配置都会在某个项目里失效——统一用 rbenv/rvm 管理,并确保全局和项目级版本一致,比折腾 Sublime 配置重要得多。











