Sublime Text 不支持 Ruby 单步调试,因其无内置调试器及配套插件生态;仅能通过构建系统运行脚本,配合 binding.pry 在外部终端交互式调试,或借助 Terminus 插件模拟终端实现断点操作。

Sublime Text 本身不支持 Ruby 单步执行(调试)——它没有内置调试器,也没有类似 VS Code 的 Ruby 插件生态来对接 ruby-debug 或 debug gem。所谓“单步执行”,在 Sublime 里只能退而求其次:靠构建系统 + 手动加 binding.pry 或 byebug 断点,再配合终端交互式调试。
为什么 Ctrl+B 不能单步执行 Ruby 脚本
Sublime 的 Build System 是单次命令执行器,本质是调用 ruby script.rb 并捕获 stdout/stderr。它不接管进程控制权,无法暂停、继续、查看变量或跳过断点。一旦脚本启动,Sublime 就只等它退出;若脚本阻塞(比如进了 pry),构建窗口会卡住,无法输入,也无法终止(Ctrl+C 在构建面板里无效)。
- Build System 不是调试器,
"cmd"或"shell_cmd"字段只负责“跑完就收” - 所有 Ruby 调试 gem(
byebug、pry-byebug、debug)都依赖终端的交互能力,Sublime 构建面板不提供 TTY - 试图用
"shell_cmd": "pry -r ./script.rb"之类写法只会静默失败或报错Input/output error
怎么让 Ruby 断点在 Sublime 里“可用”
唯一可行路径:把断点当“触发器”,用 Sublime 启动脚本 → 脚本运行到 binding.pry → 自动掉进终端 Pry 会话。这要求你放弃在 Sublime 窗口内操作,转而切到外部终端。
- 确保已安装
pry和pry-byebug:gem install pry pry-byebug - 在 Ruby 脚本中插入断点:
require 'pry'; binding.pry(注意不是byebug,它对终端兼容性更差) - 构建系统必须用登录态 shell 启动,否则
pry找不到 readline 支持:"shell_cmd": "zsh -l -c "ruby '$file'""(macOS/Linux)"cmd": ["C:\Ruby32-x64\bin\ruby.exe", "$file"](Windows,但断点仍需终端配合) - 运行后立刻切到终端(不是 Sublime 控制台),因为
pry会尝试读取/dev/tty,Sublime 构建面板无法响应
替代方案:用 Terminus 插件模拟终端调试流
如果你坚持在 Sublime 界面内完成“断点-输入-继续”闭环,Terminus 是目前最接近的方案——它嵌入真实终端,可手动执行带断点的脚本,并交互操作。
- 先装
Terminus插件(通过 Package Control),重启 Sublime - 打开命令面板(Ctrl+Shift+P),运行
Terminus: Open Default Shell in Panel - 在 Terminus 面板中手动运行:
ruby -I . your_script.rb(确保当前工作目录正确) - 断点触发后,你能在同一面板里输入
next、continue、ls等命令,效果接近原生终端 - 注意:不要用 Build System 绑定 Terminus;它是独立终端,和构建系统无关
容易被忽略的关键细节
真正卡住人的从来不是“怎么配”,而是环境链路上某个环节没对齐:
-
binding.pry报Readline not available?说明你的 Ruby 编译时没带 readline 支持,重装 Ruby(macOS 用rbenv install --verbose 3.2.2看日志) - Terminus 中
pry无法上下键翻历史?检查是否用了 zsh 的 vi mode,临时改回 emacs:bindkey -e - Windows 下
pry输入中文乱码?别用 cmd,改用 Windows Terminal + PowerShell,且确保 Ruby 安装包是官方 RubyInstaller 3.2+ 版本 - 所有方案都依赖
$file_path正确——如果脚本里有require_relative,务必在构建系统里加"working_dir": "$file_path",否则加载失败


















