sublime text按ctrl+b报“command not found: ruby”是因为gui启动未加载shell环境变量,导致path中缺失ruby路径;需先在控制台执行import os; print(os.environ.get('path'))验证,再通过zsh -l -c或绝对路径配置build system,并手动绑定.rb文件语法及修正file_regex。

Sublime Text 按 Ctrl+B 报 command not found: ruby,不是 Ruby 没装好,而是 Sublime 的 GUI 进程根本没拿到你的 shell 环境变量——PATH 里压根没有 ruby 路径,后续所有配置都白搭。
怎么确认 Sublime 真的看不到 ruby
别猜,直接看它实际用的 PATH:
- 在 Sublime 里按
Ctrl+`打开控制台 - 输入
import os; print(os.environ.get('PATH')) - 检查输出中是否包含你的
ruby所在目录,比如:- macOS Homebrew:
/opt/homebrew/bin - rbenv:
/Users/xxx/.rbenv/shims - Windows:
C:Ruby32-x64in(注意是反斜杠)
- macOS Homebrew:
- 如果没出现,说明 Sublime 启动时完全没加载
~/.zshrc或系统 PATH —— 这是问题根源,不是 Build System 写得不对
Build System 怎么写才真正生效
裸写 "shell_cmd": "ruby $file" 在 GUI 下基本必挂;关键是要让 shell 初始化逻辑跑起来:
- macOS / Linux(zsh 用户,Catalina+ 默认):
"shell_cmd": "zsh -l -c 'ruby "$file"'"
其中-l表示登录态 shell,会自动 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""
注意写绝对路径,~不会被解析
为什么 .rb 文件打开还是 Plain Text
这不是插件失效,是 Sublime 根本没把文件当 Ruby 处理。它默认只对 .rb 扩展名做语法绑定,但首次打开时可能仍显示为 Plain Text:
- 手动切换:打开任意
.rb文件 → 点右下角语言名(如Plain Text)→ 选Ruby - 永久绑定:切换后,点击右侧出现的
Open all with current extension as…,这样所有.rb文件下次都会自动用 Ruby 语法 - Sublime Text 4 自带 Ruby 支持,不用额外装旧版 Package Control 插件
file_regex 配错会导致错误行点不动
Build System 输出报错时,双击错误行跳不到对应位置,大概率是 file_regex 不匹配 Ruby 实际输出格式:
- Ruby 标准错误格式是:
test.rb:5:in `foo': undefined method `bar' (NoMethodError) - 推荐用:
"file_regex": "^([^:]*?):([0-9]*):?([0-9]*)"
注意不是^(*?):...(星号在正则里不合法) - 这个正则能捕获文件名、行号、列号(列号可选),确保双击就能跳转
最容易被忽略的是:Build System 是单次命令执行器,不支持交互式命令(如 pry)或长期进程(如 rails server)。真要跑服务,得换 Terminus 插件,而不是硬塞进 Build System 里。











