Sublime Text按Ctrl+B报“command not found: ruby”是因为GUI启动未加载shell环境变量(如~/.zshrc),导致PATH缺失;需先用import os; print(os.environ.get('PATH'))验证路径,再通过zsh -l -c(macOS/Linux)或硬编码ruby.exe绝对路径(Windows)配置Build System。

Sublime Text 能跑 Ruby,但默认按 Ctrl+B 就报 command not found: ruby,不是 Ruby 没装好,而是 Sublime GUI 启动时压根没加载你的 shell 环境(比如 ~/.zshrc),PATH 里根本没 ruby 路径——这是所有问题的起点,绕过它谈“优雅”全是空的。
怎么确认 Sublime 真的看不见 ruby
别猜,直接看它实际用的环境变量:
- 在 Sublime 里按
Ctrl+`打开控制台 - 输入
import os; print(os.environ.get('PATH')) - 检查输出里有没有你的 Ruby 路径:
– macOS Apple Silicon:通常是/opt/homebrew/bin或/Users/xxx/.rbenv/shims
– macOS Intel:/usr/local/bin
– Windows:C:Ruby32-x64in(注意是反斜杠)
如果没出现,后续所有构建配置都白搭。这时候你得先解决 PATH 可见性,而不是急着写 .sublime-build 文件。
Build System 必须带登录态 shell 或硬编码路径
裸写 "shell_cmd": "ruby $file" 在 GUI 下基本必挂;"cmd": ["ruby", "$file"] 也一样——因为没 PATH。真正稳的写法分平台:
- macOS / Linux(zsh 用户):
"shell_cmd": "zsh -l -c 'ruby "$file"'"——-l触发登录态,自动 source~/.zshrc,rbenv和rvm都能识别 - macOS / Linux(bash 用户):
"shell_cmd": "bash -l -c 'ruby "$file"'" - Windows:
"cmd": ["C:\Ruby32-x64\bin\ruby.exe", "$file"]—— 反斜杠必须双写,路径不能含空格(C:Program Files会静默失败) - 用
rbenv且想保持版本灵活:"shell_cmd": "/Users/xxx/.rbenv/shims/ruby "$file""—— 写绝对路径,~不会被解析
别漏掉 file_regex,否则错误行双击跳不进去。Ruby 标准报错格式是 test.rb:5:in `foo': undefined method `bar',推荐用:"file_regex": "^([^:]*?):([0-9]+):(?:[0-9]+)?:?.*"
.rb 文件打开还是 Plain Text?手动绑定一次就永久生效
这不是插件失效,是 Sublime 默认不自动把 .rb 当 Ruby 处理——尤其首次打开时右下角显示 “Plain Text”:
- 点右下角语言名 → 选
Ruby - 再点右侧出现的
Open all with current extension as…
之后所有 .rb 文件都会自动高亮、缩进、匹配括号。自定义扩展名(如 .ru、.rake)也要同样操作,在 View → Syntax → Open all with current extension as… 中单独绑定。
别指望 Build System 运行长期进程
rails server、rails console、pry 这类交互式或长时运行命令,不适合塞进 Build System:
- Sublime 的构建系统设计用于短时批处理,输出完就退出;长期进程容易卡死、无响应、无法交互
- 启动
rails server后 Ctrl+B 会一直转圈,关掉后服务其实还在后台跑,下次再启可能端口冲突 - 正确做法:用
Terminus插件内嵌终端,或直接切到系统终端操作
真正容易被忽略的是:Sublime 不会自动保存文件再运行。改完代码没按 Ctrl+S,Ctrl+B 执行的仍是磁盘上的旧版本——这个细节在调试时经常导致“明明改了却没生效”的困惑。











