file_regex不匹配Ruby报错格式导致双击无法跳转,标准格式为test.rb:5:in `foo',需用"^(1?):([0-9]+):?(?:[0-9]+)?:?."等鲁棒正则;同时须配working_dir="$file_path"确保require_relative正常。: ↩

file_regex 不匹配 Ruby 实际报错格式,双击就跳不到行
Sublime 的 Build System 默认不解析 Ruby 错误输出里的文件名和行号,除非 file_regex 字段精准匹配真实报错格式。Ruby 标准错误是 test.rb:5:in `foo': undefined method `bar' (NoMethodError),而很多教程给的 "^(*?):([0-9]*):?([0-9]*)" 会漏掉冒号后可能存在的列号或多余字符,导致正则失败。
实操建议:
- 用这个更鲁棒的版本:
"file_regex": "^([^:]*?):([0-9]+):(?:[0-9]+)?:?.*"—— 它能捕获file.rb:3:、file.rb:3:12:、甚至file.rb:3:in `foo':... - 别写
"^.*:(\d+):.*"这类模糊表达:它会把路径里带冒号的 Windows 驱动器(如C:...)也当行号捕获,跳转错乱 - 验证方式:故意写个
raise "boom",运行后看控制台输出是否被高亮;双击错误行,光标应准确落到对应.rb文件的那行
PATH 正确但 ruby 找不到,是因为 GUI 启动没加载 shell 初始化逻辑
即使 import os; print(os.environ.get('PATH')) 显示 Ruby 路径存在,shell_cmd 仍可能报 command not found: ruby——问题不在 PATH,而在 shell 没执行 rbenv init 或 rvm use 注入的 shims 路径。
实操建议:
- macOS/Linux 用户别裸写
"shell_cmd": "ruby $file",必须加登录态标志:"shell_cmd": "zsh -l -c 'ruby "$file"'"(注意引号嵌套和双引号转义) - Windows 用户不能依赖
shell_cmd,必须用"cmd"数组并硬编码路径:"cmd": ["C:\Ruby32-x64\bin\ruby.exe", "$file"]—— 反斜杠必须双写,路径不能含空格 - rbenv 用户可直接写 shims 绝对路径:
"shell_cmd": "/Users/xxx/.rbenv/shims/ruby "$file"",但~不会被展开,得手输完整路径
构建成功但 require_relative 失败,工作目录不对
Sublime 默认以 Sublime 自身启动目录为工作路径,不是当前文件所在目录。所以 require_relative "lib/foo" 会报 LoadError,哪怕文件结构完全正确。
实操建议:
- 显式设置
"working_dir": "$file_path"字段,让构建时 cwd 切到当前文件所在目录 - 不要依赖
"path"字段“补 PATH”——它只影响子进程环境变量,解决不了工作目录问题 - 如果项目有
bin/setup或需要 Bundler 环境,仅靠 Build System 不够,得配合Terminus插件在终端里跑bundle exec ruby script.rb
错误提示里中文乱码或 UTF-8 解析失败
Ruby 脚本含中文字符串、注释或错误消息时,Sublime 构建输出常出现 符号,根本原因是编码未声明或终端 locale 不一致。
实操建议:
- 在 Build System 配置中强制指定:
"encoding": "utf-8"(注意是小写,不是UTF-8或UTF8) - macOS/Linux 用户确保 shell 的
LANG已设为 UTF-8:echo $LANG应输出类似en_US.UTF-8;若为空,需在~/.zprofile补export LANG=en_US.UTF-8 - Windows 用户若用 RubyInstaller,安装时勾选 “Add Ruby executables to your PATH” 和 “Associate files”,避免 cmd 编码为 GBK 导致输出截断
最常被忽略的是:file_regex 和 working_dir 这两个字段看似次要,但一旦缺失或写错,错误定位和相对路径加载就会静默失效——它们不像 cmd 那样报错明显,而是让你反复怀疑代码本身有问题。











