sublime text 本身不运行 ruby,仅调用系统已安装的 ruby 命令;报“ruby: command not found”主因是 gui 启动未加载 shell 环境变量,需通过终端启动 subl、配置 build system 显式指定 ruby 路径或使用 zsh -l -c 加载登录态环境。

Sublime Text 本身不运行 Ruby,它只是调用你系统里已安装的 ruby 命令;所谓“自动化运行”,本质是让 Build System 稳定、准确地把当前 .rb 文件交给正确的 Ruby 解释器执行——而失败绝大多数时候不是 Sublime 的问题,而是环境没对齐。
按 Ctrl+B 报 “ruby: command not found” 怎么办
这是最常见也最容易误判的问题:终端能跑 ruby -v,但 Sublime 找不到 ruby。GUI 启动的 Sublime 默认不加载 shell 配置(如 ~/.zshrc),也就读不到 rbenv、rvm 或 asdf 注入的路径。
- 先在 Sublime 控制台(
View → Show Console)运行:import os; print(os.environ.get('PATH')),看输出里有没有你的 Ruby 路径(比如/opt/homebrew/bin、/Users/xxx/.rbenv/shims或C:\Ruby32-x64\bin) - macOS/Linux 用户优先改用终端启动:
subl .(前提是已配置subl命令),它会继承当前 shell 的PATH和版本管理器状态 - Windows 用户必须把
ruby.exe所在目录(如C:\Ruby32-x64\bin)加入「系统环境变量」PATH,不能只加进「用户变量」 - 别信
Tools → Build With → Ruby,那是 Sublime 2 的遗留项,基本失效
Build System 怎么写才不踩坑
Build System 是 Sublime 调用外部命令的唯一通道,写错一个字段就可能静默失败或报错跳转失灵。关键字段不是可有可无的装饰,而是功能刚需。
-
"cmd"或"shell_cmd"必须明确指定 Ruby 可执行路径:用which ruby查到的完整路径最稳,比如"/Users/xxx/.rbenv/shims/ruby";裸写"ruby"依赖PATH,GUI 下大概率崩 -
"file_regex": "^(*?):([0-9]*):?([0-9]*)"必须加上,否则错误信息里的行号无法双击跳转 -
"selector": "source.ruby"是触发条件,确保只对.rb文件生效;没这句,按Ctrl+B可能根本没反应 -
"working_dir": "$file_path"推荐显式设置,否则require_relative或File.read会因工作目录不对而报LoadError或Errno::ENOENT - macOS/Linux 用
"shell_cmd": "zsh -l -c 'ruby \"$file\"'"比裸"cmd"更兼容版本管理器,但注意引号嵌套和空格转义
为什么 .rb 文件打开是纯文本、没有高亮
这不是插件缺失,也不是 Ruby 没装好,而是 Sublime 根本没把 .rb 当作 Ruby 文件处理。新装或重置后默认不关联,得手动绑定。
- 点击编辑区右下角当前语言名(比如显示
"Plain Text")→ 选择Ruby→ 再点右侧弹出的Open all with current extension as…→ 确认选中Ruby - 如果文件扩展名是
.ru、.rake或.erb,需单独绑定:右键底部语法名 →Set Syntax as Default for this Extension,输入对应扩展名 - 别去改
Preferences → Settings – Syntax Specific,那只是临时覆盖,不解决文件类型关联 - 原生 Sublime 不提供方法级自动补全;如需
def下拉提示,得装插件(如SublimeCodeIntel),但高亮不需要插件
中文乱码、require 找不到 gem、脚本卡住没输出
这些现象看着像 Ruby 问题,其实是 Build System 的上下文太“干净”了:没有项目 Gemfile、没有 $LOAD_PATH、没有 UTF-8 locale 声明,导致行为和终端不一致。
- 中文输出乱码:在 Build System 里加
"env": {"LANG": "en_US.UTF-8", "LC_ALL": "en_US.UTF-8"},强制子进程用 UTF-8 编码 -
require找不到本地文件或 gem:优先用bundle exec ruby "$file"替代裸ruby "$file",并在"shell_cmd"中显式cd到项目根目录,例如:"shell_cmd": "cd \"$project_path:.\" && bundle exec ruby \"$file\"" - 脚本卡住(比如用了
gets或irb):Build System 不支持交互式输入,这类命令应改用Terminus插件开内建终端运行 - 想运行
rails server或rspec?别硬塞进 Build System —— 它不是为长期服务设计的,关不掉、没日志、没法交互
最常被忽略的一点:Build System 的生效依赖两个独立条件同时满足——文件语法必须是 Ruby(右下角显示),且 Build System 必须被手动选中(Tools → Build System 里勾选你配的那个)。缺一不可,而很多人只做了其中一半。











