Sublime Text GUI启动不加载shell配置导致ruby路径不可见,macOS/Linux需用zsh -l -c或bash -l -c调登录shell,Windows须硬编码ruby.exe绝对路径并正确设置语法和构建系统。

Sublime Text 读不到 rbenv/rvm 的 Ruby 路径,根本原因是 GUI 启动不加载 shell 配置
Sublime Text 按 Ctrl+B 报 command not found: ruby,不是 Ruby 没装好,而是它压根没读你的 ~/.zshrc 或 ~/.bash_profile。GUI 应用(包括点击图标启动的 Sublime)默认不触发 shell 登录流程,rbenv init 或 rvm reload 注入的路径完全不可见。验证方式只有一条:按 Ctrl+` 打开控制台,运行 import os; print(os.environ.get('PATH')),看输出里有没有 /Users/xxx/.rbenv/shims 或 ~/.rvm/bin —— 没出现就别往下配构建系统了。
macOS/Linux 下必须用 zsh -l -c 或 bash -l -c 启动登录态 shell
硬编码 /Users/xxx/.rbenv/shims/ruby 看似简单,但会锁死版本,且 rbenv 的 shims 本身依赖环境变量生效。最稳的方式是让 Sublime 调起一个完整登录 shell:
{
"shell_cmd": "zsh -l -c 'ruby "$file"'",
"file_regex": "^([^:]*):([0-9]+):?([0-9]*)",
"selector": "source.ruby",
"encoding": "utf-8"
}
注意三点:
-
-l是关键,表示 login shell,会自动 source~/.zshrc(macOS Catalina+ 默认 zsh;若用 bash,请换为bash -l -c) - 单引号和双引号嵌套必须严格:外层双引号包裹整个命令,内层单引号包裹
ruby "$file",否则含空格路径会崩 -
file_regex必须匹配 Ruby 错误格式(如test.rb:5:in `foo': undefined method),否则双击错误行跳不到对应位置
Windows 用户没法用 shell 登录态,只能显式写死 ruby.exe 绝对路径
Windows 不支持 zsh -l -c 这类机制,cmd 或 PowerShell 也无法可靠复现 rbenv/rvm 行为。唯一可行路径是直接指向解释器:
{
"cmd": ["C:\Ruby32-x64\bin\ruby.exe", "$file"],
"file_regex": "^([^:]*):([0-9]+):?([0-9]*)",
"selector": "source.ruby"
}
关键细节:
- 反斜杠必须双写(
C:\Ruby32-x64\bin\ruby.exe),否则 JSON 解析失败 - 路径不能含空格;若 Ruby 装在
C:\Program Files\下,要么重装到无空格路径,要么用mklink /D创建符号链接绕过 - 务必右键
ruby.exe→ 属性 → 「位置」字段确认真实路径,不要凭记忆写
Build System 保存后,还要手动绑定 .rb 文件语法并选中该构建系统
即使构建系统配置正确,.rb 文件打开时仍可能显示为 Plain Text,导致 Ctrl+B 无响应。这不是插件问题,是 Sublime 原生行为:
- 打开任意
.rb文件 → 点右下角语言名(如Plain Text)→ 选Ruby - 点击右侧弹出的
Open all with current extension as…,这样所有.rb文件下次都会自动用 Ruby 语法高亮 - 菜单栏
Tools → Build System → Ruby(或你刚保存的构建系统名),确保当前激活的是你配置的那个 - 别用 Build System 启动
rails server或长期进程,它只适合单次脚本执行;服务类任务请用Terminus插件或终端
复杂点在于:rbenv/rvm 的路径解析依赖 shell 初始化顺序,而 Sublime 的 GUI 进程根本不走这一步。你得在「让 shell 自己加载环境」和「绕过 shell 直接调解释器」之间做选择,没有银弹 —— macOS/Linux 选前者更灵活,Windows 只能选后者。











