sublime text 不自带 ruby 解释器且不继承终端 path,导致 ctrl+b 报“command not found”;根本原因是 gui 启动时不加载 shell 配置(如 ~/.zshrc),需通过新建 build system 显式调用登录 shell(如 zsh -l -c)或指定 ruby 绝对路径,并手动绑定 .rb/.erb/.ru 等文件语法。

Sublime Text 本身不带 Ruby 解释器,也**不会自动继承你终端里的 PATH**——这是所有配置失败的根源。只要终端能跑 ruby -v,但 Sublime 按 Ctrl+B 报 sh: ruby: command not found,问题就出在这儿,不是 Ruby 没装好,也不是插件选错了。
为什么终端能跑 ruby,Sublime 却找不到?
macOS/Linux GUI 启动 Sublime(比如双击图标)时,它不加载 ~/.zshrc 或 ~/.bash_profile,也就读不到 rbenv/rvm 注入的 PATH;Windows 则默认只读「系统环境变量」,如果你装 Ruby 时没勾选“Add to PATH”或只加到了「用户变量」,Sublime 就看不见。
- 验证方式:在 Sublime 里按
Ctrl+`打开控制台,运行import os; print(os.environ.get('PATH')),看输出里有没有你的 Ruby 路径(如/opt/homebrew/bin、/Users/xxx/.rbenv/shims或C:Ruby32-x64in) - macOS 用户别改
~/.zshrc,改~/.zprofile并重启 Sublime 才生效 - Windows 用户务必把 Ruby 的
bin目录加到「系统环境变量」PATH,不是「用户变量」
Build System 怎么写才真正可用?
Build System 是 JSON 文件,核心是让 Sublime 知道怎么调用 ruby。别用默认的 “Ruby” 构建系统(那是 Sublime 2 遗留项,路径硬编码),自己新建一个。
- 用
shell_cmd+ 登录 shell(推荐):{"shell_cmd": "zsh -l -c 'ruby $file'", "file_regex": "^(*?):([0-9]*):?([0-9]*)", "selector": "source.ruby"}—— macOS Catalina+ 默认 zsh,-l表示登录态,能加载~/.zprofile和 rbenv/rvm 配置 - 用
cmd+ 绝对路径(最稳):{"cmd": ["/opt/homebrew/bin/ruby", "$file"], "file_regex": "^(*?):([0-9]*):?([0-9]*)", "selector": "source.ruby"}—— 适合 Homebrew 安装,或 Windows:{"cmd": ["C:\Ruby32-x64\bin\ruby.exe", "$file"]}(注意双反斜杠) - 别碰
path字段试图“补 PATH”——它只影响子进程,解决不了 shell 初始化缺失的根本问题
.rb、.erb、.ru 文件语法高亮失效怎么办?
Sublime 不会自动把 .rb 当作 Ruby,也不会识别 .erb 是 Rails 模板——这不是 Bug,是默认行为。必须手动绑定。
- 打开任意
.rb文件 → 右下角点当前语言名(如 “Plain Text”)→ 选 “Ruby” → 再点右侧 “Open all with current extension as…” → 输入rb确认 -
.erb文件:View → Syntax → Ruby on Rails → HTML (Rails) → 同样右下角 “Open all with current extension as…” → 输入erb -
.ru或.rake:View → Syntax → Ruby → “Open all with current extension as…” → 输入ru或rake - 别去改 Preferences → Settings – Syntax Specific,那只是临时覆盖,不解决文件关联
想跑 rails server 或 rspec,能用 Build System 吗?
不能。Build System 是单次执行器,设计用来跑 ruby script.rb 这种短命脚本。强行配 rails server 会导致 Sublime 卡死、端口占着不放、无法终止。
- 真实可行的做法只有两个:用
Terminus插件(通过 Package Control 安装),然后Ctrl+Shift+P→ “Terminus: Open Default Shell”,在里面跑rails server或rspec - 或者老老实实用系统终端:Sublime 专注写代码,终端专注运行服务——这是最稳的分工
- 别信“Build with arguments”或
cd $file_path && rails s这类写法,$file_path在嵌套目录下极易解析失败,且 Build System 不支持交互式 TTY
最容易被忽略的是:Build System 不会自动保存文件。你改了代码但没按 Ctrl+S,Ctrl+B 运行的仍是磁盘旧版本。装 SaveOnBuild 插件是唯一靠谱解法。











