starship 提示符中 ruby 版本不显示,需确保 ruby -v 可执行、启用 ruby 模块或自定义模块,并适配版本管理器及 nerd fonts 图标支持。

如果您在终端中使用 Starship 作为提示符工具,但 Ruby 版本信息未显示,则可能是由于 Ruby 环境未被正确识别或相关模块未启用。以下是实现 Ruby 版本显示的具体配置步骤:
一、确认 Ruby 运行时环境已就绪
Starship 依赖于当前 Shell 中可执行的 ruby 命令及其 --version 输出来检测并展示版本。它不通过 rbenv、RVM 或 chruby 等版本管理器直接读取元数据,而是调用系统路径下的 ruby 可执行文件进行探测。因此,必须确保终端中运行 ruby -v 能返回有效输出,且该命令所指向的 Ruby 实例与您期望显示的版本一致。
1、打开终端,执行 ruby -v 命令。
2、若提示 command not found: ruby 或返回错误,则需先完成 Ruby 安装及 PATH 配置。
3、若使用 rbenv,确保已执行 rbenv global 3.2.2(或其他目标版本)并运行 rbenv rehash。
4、若使用 RVM,确保已执行 rvm use 3.2.2 --default 并验证 which ruby 指向 RVM 管理路径。
二、启用 Ruby 模块并调整显示逻辑
Starship 默认禁用 Ruby 模块,需手动在配置文件中显式启用。该模块仅在当前目录下存在 .ruby-version、Gemfile 或 *.gemspec 等 Ruby 上下文标识文件时才触发显示,避免全局污染提示符。
1、确认配置文件路径为 ~/.config/starship.toml;若不存在,请创建该文件。
2、在文件中添加以下 TOML 片段:
[ruby]
detect_files = [".ruby-version", "Gemfile", ".ruby-gemset", "*.gemspec"]
detect_folders = []
format = "via [${version}](bold fg:blue) "
3、保存文件后,在当前终端中执行 starship reload 或新开一个终端窗口。
三、强制始终显示 Ruby 版本(无上下文依赖)
默认行为是“按需显示”,即仅当检测到 Ruby 项目文件时才渲染。如需在所有目录下恒定显示当前 Ruby 版本(例如调试环境一致性),需覆盖默认检测逻辑,改用环境变量或硬编码方式触发。
1、编辑 ~/.config/starship.toml,删除或注释原 [ruby] 区块。
2、新增如下自定义模块定义:
[custom.ruby-always]
command = "ruby -v | cut -d' ' -f2"
when = "true"
format = "via [${output}](bold fg:blue) "
shell = ["sh", "-c"]
3、确保该 custom 模块已加入 prompt_order 列表(若已定义),例如:
prompt_order = ["custom.ruby-always", "directory", "git_branch", "line_break", "status", "character"]
四、适配 rbenv/RVM 版本切换场景
当使用 rbenv 或 RVM 时,Starship 默认无法感知 shell 函数级的版本切换(如 rbenv shell 或 rvm use),因其运行于子进程,不继承函数定义。此时需借助 shell 初始化钩子,将当前 Ruby 版本写入环境变量供 Starship 读取。
1、在 ~/.bashrc 或 ~/.zshrc 中添加:
export STARSHIP_RUBY_VERSION=$(ruby -v | cut -d' ' -f2)
2、在 ~/.config/starship.toml 中定义:
[custom.ruby-env]
command = "echo $STARSHIP_RUBY_VERSION"
when = "[ -n \"$STARSHIP_RUBY_VERSION\" ]"
format = "via [${output}](bold fg:blue) "
3、将 custom.ruby-env 加入 prompt_order。
五、禁用图标乱码并启用 Ruby 图标
Starship 使用 Unicode 符号(如 ? 或 ⚙️)和 Powerline 字体 glyph 表示语言模块。若 Ruby 图标显示为方块或空白,说明终端未加载支持 Nerd Fonts 的字体,或未启用对应图标集。
1、下载并安装 JetBrainsMono Nerd Font 或 FiraCode Nerd Font。
2、在终端设置中将默认字体更改为上述任一 Nerd Font 的 Regular 或 Medium 变体。
3、在 ~/.config/starship.toml 中为 Ruby 模块指定图标:
[ruby]
symbol = "? "
format = "via [${symbol}${version}](bold fg:blue) "











