Sublime Text 的 Ruby 语法检查依赖本地 ruby 和 rubocop,需手动配置路径、语法绑定及正则匹配:先确保终端可运行 rubocop --version;再在 SublimeLinter 设置中硬编码 rubocop 可执行路径;最后将 .rb 等文件正确绑定为 source.ruby 作用域,并配置 file_regex 以支持错误跳转。

Sublime Text 语法检查依赖本地 ruby 和 rubocop,不是插件自动开箱即用
Sublime Text 本身不提供 Ruby 语法检查能力,所有报错、风格提示都靠外部 CLI 工具驱动。核心链条是:SublimeLinter → SublimeLinter-rubocop → 系统里装好的 rubocop gem → 调用 ruby 解释器解析代码。只要其中一环断掉,控制台就会报 php: command not found 这类路径错误(注意:错误信息里写的是 php,但实际是泛指任意 linter 找不到可执行命令)。
- 先确认终端能跑
rubocop --version,不能就gem install rubocop;CocoaPods 1.10+ 用户建议用gem install rubocop -v 1.40.0避免 Ruby 3.0+ 语法误报 - 再验证 Sublime 是否能看见
rubocop:按Ctrl+`打开控制台,运行import os; print(os.environ.get('PATH')),检查输出是否含/opt/homebrew/bin(macOS Homebrew)、/Users/xxx/.rbenv/shims(rbenv)或C:Ruby32-x64in(Windows) - 如果 PATH 里没有,
SublimeLinter-rubocop就会静默失效——它不会报错,只是不显示任何提示
SublimeLinter-rubocop 的路径必须显式配置,不能靠 shell 自动加载
SublimeLinter 不走 shell 启动流程,zsh -l -c 对它无效。它直接调用 rubocop 命令,所以必须在插件设置里硬编码可执行路径。
- 打开
Preferences → Package Settings → SublimeLinter → Settings - 在右侧用户设置中加这段(路径按你系统实际填):
{
"linters": {
"rubocop": {
"executable": ["/opt/homebrew/bin/rubocop"]
}
}
}
macOS rbenv 用户填 ["/Users/xxx/.rbenv/shims/rubocop"](绝对路径,~ 不展开);Windows 用户填 ["C:\Ruby32-x64\bin\rubocop.bat"](注意双反斜杠,且要用 .bat 而非 .exe)
file_regex 不匹配会导致错误定位失败,但不影响检查本身
SublimeLinter-rubocop 输出的错误行格式和 Build System 不同,它默认用 rubocop 的标准格式:app/models/user.rb:12:3: C: Style/StringLiterals: Prefer single-quoted strings when you don't need string interpolation or special symbols.。如果插件设置里 file_regex 没对上,错误依然会出现在面板里,但双击无法跳转到对应行。
- 推荐在
SublimeLinter → Settings用户设置中显式覆盖正则:
"file_regex": "^([^:]+):([0-9]+):([0-9]+): (?:[A-Z]+): (.*)$"
这个正则能匹配 rubocop v1.40+ 的典型输出;旧版 rubocop 若用冒号分隔字段更少,需相应删减组数
语法绑定错误会让 lint 完全不触发
SublimeLinter-rubocop 只对 source.ruby 作用域生效。如果 .rb 文件右下角显示的是 Plain Text 或 HTML,linter 根本不会启动——它连文件类型都认不出来。
- 手动切换:打开任意
.rb文件 → 点右下角语言名 → 选Ruby - 永久绑定:切换后立刻点右下角弹出的
Open all with current extension as…→ 再选Ruby - Podfile、Rakefile 等无
.rb后缀的文件,也要同样操作:先切语法,再点Open all with current extension as…
这个步骤最容易被跳过,尤其当文件首次打开时右下角显示 Plain Text,很多人以为是插件没装好,其实是 Sublime 根本没把它当 Ruby 处理。


















