Sublime中ruby -v仍显示旧版本,是因为GUI启动未加载shell配置(如~/.zshrc),导致rbenv/rvm切换失效;需在控制台执行import os; print(os.environ.get('PATH'))验证shims路径是否存在,并通过zsh -l -c或绝对路径配置Build System,且必须重启Sublime并从终端启动以继承当前shell环境。

Sublime 里 ruby -v 还是旧版本?先确认它看到的 PATH
rbenv 或 rvm 切换 Ruby 版本后,Sublime 按 Ctrl+B 仍跑在老版本上,不是切换失败,而是 Sublime 的进程根本没加载 shell 初始化逻辑。GUI 启动的 Sublime 不读 ~/.zshrc(macOS)或 ~/.bashrc(Linux),所以 rbenv shell 3.2.2 或 rvm use 3.1.4 在终端生效,对 Sublime 没影响。
验证方式:在 Sublime 里按 Ctrl+` 打开控制台,执行:import os; print(os.environ.get('PATH'))
检查输出中是否包含 /Users/xxx/.rbenv/shims 或 /Users/xxx/.rvm/bin。没有就说明环境变量压根没进来,后续所有构建配置都会绕过你刚切的新版本。
Build System 必须显式调用 shims 或登录态 shell
别再用裸 "cmd": ["ruby", "$file"]——它会走系统默认 ruby(通常是 /usr/bin/ruby),和 rbenv/rvm 无关。要让版本切换生效,得让 shell 自己去 resolve:
- rbenv 用户(推荐):
"shell_cmd": "zsh -l -c 'ruby "$file"'"(macOS/Linux),-l触发登录态,自动 source~/.zshrc,shims 就能命中当前rbenv version结果 - rbenv 但想锁死路径(更稳):
"shell_cmd": "/Users/xxx/.rbenv/shims/ruby "$file"",注意写绝对路径,~不会被解析 - rvm 用户:
"shell_cmd": "bash -l -c 'source $HOME/.rvm/scripts/rvm && rvm use default && ruby "$file"'",必须显式 source rvm 脚本 - Windows + RubyInstaller:
"cmd": ["C:\Ruby32-x64\bin\ruby.exe", "$file"],路径必须双反斜杠,且不能含空格
.rb 文件语法绑定不影响 Ruby 版本,但影响错误定位
文件右下角显示 “Ruby” 仅表示语法高亮和缩进规则生效,和解释器版本完全无关。但它会影响 file_regex 是否匹配实际报错格式——Ruby 3.2+ 的错误行号格式和 2.x 略有差异,尤其带列号时(如 test.rb:5:12)。
确保 Build System 中的 file_regex 能覆盖新版本输出:"file_regex": "^([^:]*?):([0-9]+):(?:[0-9]+)?:?.*"
这个正则能同时匹配 test.rb:5 和 test.rb:5:12,双击错误行才能准确定位。
别依赖 “自动重载”,改完版本必须重启 Sublime
rbenv/rvm 切换后,即使你更新了 Build System 配置,Sublime 也不会自动刷新其进程环境变量。它继承的是启动那一刻的环境快照。
必须做两件事:
• 完全退出 Sublime(macOS 上右键 Dock 图标 → Quit,别只是关窗)
• 从终端启动:subl .(macOS/Linux)或 start subl .(Windows),这样它才继承当前 shell 的 PATH 和 rbenv/rvm 状态
• 如果习惯 GUI 启动,macOS 用户请把 PATH 写进 ~/.zprofile(不是 ~/.zshrc),然后重启系统级 session

















