Sublime怎么运行Ruby_Sublime Ruby环境搭建指南【环境】

1次阅读

sublime text 中 ctrl+b 运行 ruby 报错“command not found”的根本原因是其默认使用系统 path 查找 ruby,而未配置 rbenv/rvm 或未将 ruby 路径加入 path;应新建 build system 并显式指定 ruby 完整路径,同时设置 env 编码变量和 working_dir 以适配版本管理、utf-8 中文路径及 bundler 环境。

Sublime怎么运行Ruby_Sublime Ruby环境搭建指南【环境】

sublime text 里直接按 Ctrl+B 运行 Ruby 报错 ruby: command not found

根本原因不是 Sublime 有问题,而是它默认调用系统 PATH 里的 ruby 命令——如果你没把 Ruby 安装路径加进系统 PATH,或者用的是 rbenv/rvm 管理的 Ruby,Sublime 就找不到可执行文件。

实操建议:

  • 在终端运行 which ruby,确认 Ruby 可执行文件真实路径(比如 /Users/xxx/.rbenv/shims/ruby/opt/homebrew/bin/ruby
  • 打开 Sublime Text → Tools → Build System → New Build System…,粘贴以下内容(注意替换 ruby 路径):
{     "shell_cmd": "/Users/xxx/.rbenv/shims/ruby "${file}"",     "file_regex": "^(...*?):([0-9]*):?([0-9]*)",     "selector": "source.ruby" }
  • 保存为 Ruby.sublime-build,然后在右下角状态栏手动选中这个构建系统
  • Mac 上如果用了 zsh,且 Ruby 是通过 rbenv 安装的,subl 命令从终端启动才能继承 shell 环境;否则 Sublime 启动时读不到 ~/.zshrc 里的 rbenv 初始化逻辑

Build System 里写 ruby -v 能跑通,但运行 .rb 文件报语法错误

常见于 Ruby 版本不一致:你终端里 ruby -v 显示 3.2,但 Sublime 调用的可能是系统自带的 2.6(尤其 macos 默认带旧版 Ruby)。

实操建议:

  • 在 Build System 的 shell_cmd 中显式指定完整路径,别依赖 ruby 别名或未激活的版本管理器
  • 在构建命令里加 -W 参数快速验证版本:/path/to/ruby -W -v,看输出是否和终端一致
  • 如果用 rvm,不能只写 rvm use 3.2 && ruby ${file}——rvm 是 shell function,Sublime 的 build system 不加载 shell 函数,必须用 rvm-exec 或直接调用具体路径

中文路径或文件名下运行 Ruby 报 invalid multibyte char (UTF-8)

不是编码设置问题,是 Sublime 默认用系统 locale 启动子进程,而 macOS/linux 某些 locale(如 CPOSIX)不声明 UTF-8,Ruby 解析源码时拒绝处理非 ASCII 字符。

实操建议:

  • 在 Build System 的 env 字段强制注入编码环境变量:
{     "shell_cmd": "/path/to/ruby "${file}"",     "env": {"LANG": "en_US.UTF-8", "LC_ALL": "en_US.UTF-8"},     "file_regex": "^(...*?):([0-9]*):?([0-9]*)",     "selector": "source.ruby" }
  • windows 用户注意:chcp 65001 并不能被 Sublime build system 自动继承,得用 cmd /c "chcp 65001 >nul && ruby ${file}" 包一层
  • 该问题在 Ruby 3.0+ 更敏感,因为默认启用更严格的源码编码检查

想用 Bundler 管理 gem 依赖,但 bundle exec ruby 在 Build System 里不生效

bundle exec 本质是包装器,它要找到当前目录下的 Gemfile 才能生效。Sublime 构建时的工作目录(cwd)默认是文件所在目录,但有时会因项目结构或插件干扰变成其他路径。

实操建议:

  • 显式指定工作目录,在 Build System 中加 "working_dir": "${file_path}"
  • 避免用 bundle exec ruby ${file},改用 bundle exec ruby -Ilib "${file}"(加上 -Ilib 防止 require 报错)
  • 如果项目有多个 Gemfile(如 monorepo),确保 Sublime 当前打开的是对应子目录下的文件,否则 bundle exec 会找不到目标 Gemfile

最易被忽略的一点:Sublime 的 Build System 不支持交互式输入(gets 会立即返回 nil),所有依赖用户输入的 Ruby 脚本,在这里运行都会静默失败——这不是环境问题,是设计限制。

text=ZqhQzanResources