sublime text 本身不运行 ruby,只调用系统已安装的 ruby 命令;ctrl+b 报“command not found”主因是 gui 启动未加载 shell 配置(如 ~/.zshrc),导致 path 缺失,需通过终端启动 subl . 或手动在 build system 中指定绝对路径并配置 shell_cmd 加载登录 shell 环境。

Sublime Text 本身不运行 Ruby,它只调用你系统里已装好的 ruby 命令;配置失败几乎全是环境没对齐,不是插件或 Sublime 的锅。
为什么终端能跑 ruby -v,但 Sublime 按 Ctrl+B 就报 ruby: command not found
GUI 启动的 Sublime(比如双击图标)不加载 ~/.zshrc 或 ~/.bash_profile,也就读不到 rbenv、rvm 或 Homebrew 注入的 PATH。Windows 则常因只把 ruby.exe 加进「用户变量」而漏掉「系统变量」。
- 先验证:View → Show Console,运行
import os; print(os.environ.get('PATH')),看输出里有没有你的 Ruby 路径(如/opt/homebrew/bin、/Users/xxx/.rbenv/shims或C:Ruby32-x64in) - macOS/Linux 用户更稳的解法是用终端启动:
subl .(前提是已配好subl命令),它会继承当前 shell 的全部环境 - Windows 用户必须把 Ruby 安装目录下的
bin文件夹(如C:Ruby32-x64in)加进「系统环境变量」PATH,不能只加用户变量
Build System 怎么写才不会卡死或静默失败
Build System 是单次命令执行器,不是终端,不支持交互式命令(如 pry)、长期服务(如 rails server)或带空格的路径。
一款AI工具,主要用于Monitor and clean up invalid Codex authentication files in CPA. Check quota status, disable files returning 401 errors, and perform dual verification before deletion.,适合需要提升相关任务效率的用户。
- macOS/Linux 推荐用登录态 shell 加载环境:
"shell_cmd": "zsh -l -c "ruby '$file'""(Catalina+ 默认 zsh;用bash -l -c也行) - Windows 必须写死路径:
"cmd": ["C:\Ruby32-x64\bin\ruby.exe", "$file"],注意双反斜杠,且路径不能含空格(否则静默失败) - 别加
"path"字段试图“补 PATH”——它只影响子进程,解决不了 shell 初始化缺失的根本问题 - 别用 Tools → Build With → Ruby 默认选项,那是 Sublime 2 遗留,硬编码路径,基本失效
为什么 .rb 文件打开后还是 Plain Text,没有高亮和缩进
Sublime 默认不自动识别 .rb 扩展名,这不是插件问题,而是文件类型未绑定。
- 打开任意
.rb文件 → 点右下角当前语言名(如 “Plain Text”)→ 选Ruby - 再点右侧的
Open all with current extension as…,让所有.rb文件默认用 Ruby 语法 - Sublime Text 4 自带 Ruby 支持,无需额外装 Package Control 里的旧版 Ruby 包
- 若用自定义扩展名(如
.ru或.rake),需单独在 View → Syntax → Open all with current extension as… 中绑定
想跑 rspec 或调试用 pry,但 Ctrl+B 不工作
Build System 无法承载交互式流程或带参数的测试命令。强行配会导致窗口闪退、卡死、端口占着不放。
-
rspec可配专用 Build System:"shell_cmd": "bundle exec rspec $file:$line_number",配合file_regex实现错误跳转 -
pry、irb、rails console这类必须用外部终端,推荐装Terminus插件,在 Sublime 内嵌终端里运行 - 别给 Build System 加
stdin或interactive字段——Sublime 不支持 - 文件没保存就按 Ctrl+B?执行的是磁盘上旧版本;可装
SaveOnBuild插件自动保存后构建
最易被忽略的一点:Build System 里写的 $file 指的是当前文件的**磁盘路径**,不是编辑缓冲区内容;哪怕你改了代码但没保存,它照样跑旧文件。这个行为不是 bug,是设计如此。










