sublime中ruby脚本不运行,首要检查build system是否正确激活并配置;需确认语法设置为ruby、手动指定ruby路径、解决gui环境变量未加载问题,并通过终端启动或shell封装命令确保rbenv/asdf生效。

Sublime 里 Ruby 脚本根本没运行?先看 build system 是否激活
Sublime 不像 IDE 那样自动识别 Ruby,它靠 Build System 决定按什么规则执行当前文件。如果你点了 Ctrl+B(Windows/Linux)或 Cmd+B(macOS)没反应,大概率是没选对或没建好 build system。
- 确认当前文件后缀是
.rb,且右下角状态栏显示 “Ruby” —— 如果显示 “Plain Text”,右键 →Set Syntax→Ruby - 菜单栏点
Tools→Build System→ 确保勾选了你配置的 Ruby 项(比如Ruby或My Ruby),不是Automatic或None -
Automatic模式下,Sublime 只认系统自带的ruby命令,如果你用rbenv或asdf管理版本,它大概率找不到你的 Ruby
自己写 build system:路径和 shell 参数是关键
系统自带的 Ruby build system 经常失效,尤其在 macOS 或用版本管理器时。最稳的方式是手动建一个 .sublime-build 文件,明确指定 Ruby 可执行路径和参数。
- 菜单栏
Tools→Build System→New Build System… - 删掉默认内容,粘贴以下(根据你本地 Ruby 路径调整):
{
"cmd": ["/Users/yourname/.rbenv/shims/ruby", "$file"],
"selector": "source.ruby",
"file_regex": "^(...*?):([0-9]*):?([0-9]*)",
"working_dir": "$file_path"
}
-
"cmd"中的路径必须是你实际的ruby可执行文件路径,可用which ruby查;用rbenv就填~/.rbenv/shims/ruby,用asdf就填~/.asdf/shims/ruby -
"working_dir"设成"$file_path"很重要,否则require_relative或文件读写会因路径错乱而报LoadError或Errno::ENOENT - 保存为
Ruby.sublime-build,它会自动出现在Build System菜单里
运行时报 “command not found: ruby” 或 “No such file or directory”
这是 Sublime 启动时没加载 shell 环境变量导致的,GUI 应用(包括 Sublime)默认不读 ~/.zshrc 或 ~/.bash_profile,所以即使终端里 ruby -v 正常,Sublime 里也找不到。
- Mac 用户最简单解法:用终端启动 Sublime,比如
subl .(前提是已配置subl命令);这样它能继承当前 shell 的 PATH 和 rbenv/asdf 环境 - 不想总开终端?改 build system,把
"cmd"换成带 shell 初始化的写法(仅限 bash/zsh):
{
"cmd": ["zsh", "-c", "ruby $file"],
"selector": "source.ruby",
"working_dir": "$file_path"
}
- 但注意:这种写法会慢一点,每次运行都启一个新 shell;而且 Windows 上得换成
cmd.exe /c,路径分隔符也要处理 - 别试图在
"cmd"里直接写source ~/.zshrc && ruby $file—— Sublime 的 exec 模块不支持复合 shell 命令
想传参数给 Ruby 脚本?build system 支持变量但有限制
Sublime 的 build system 支持 $file、$file_base_name 这类变量,但不支持交互式输入或命令行参数透传。如果脚本需要 ruby script.rb arg1 arg2,就得手动改 build system。
- 最常用做法:把参数硬编码进
"cmd",比如:
"cmd": ["/path/to/ruby", "$file", "hello", "world"]
- 想临时换参数?可以复制一份 build system,改名(如
Ruby with args.sublime-build),再改"cmd"里的值 - 别用
$input或尝试弹窗——Sublime build system 没交互能力;需要动态参数,不如直接切到终端跑 - 如果脚本依赖
ARGV,记得测试顺序:build system 里"cmd"数组的第二项起才是传给 Ruby 的参数,$file是第一个
真正麻烦的不是写 build system,而是 Ruby 版本、shell 环境、GUI 启动方式这三者怎么对齐。很多人卡在“终端能跑,Sublime 报错”,问题八成出在环境变量没继承上,而不是 build 文件本身写错了。










