Starship No Runtime Versions 预置实战:在容器与虚拟化环境中隐藏语言运行时版本
Starship No Runtime Versions 预置实战在容器与虚拟化环境中隐藏语言运行时版本【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starshipStarship 默认会在提示符中展示当前项目所用的语言运行时版本如 v1.45.0、 v3.12.1但对于容器、虚拟化环境或固定工具链的团队而言这些版本号往往是噪音而非信息。官方No Runtime Versions预置通过重写各语言模块的format只保留语言图标与连接词彻底隐藏版本号。本文将以 俄语预置文档 为主体结合仓库中的 预置 TOML 文件 与 preset 命令的源码实现完整讲解该预置的用途、安装方式、配置结构、底层原理与自定义方法读完即可在自己的环境中落地使用。一、这个预置解决什么问题Starship 的绝大多数语言模块python.rs、rust.rs、nodejs.rs 等默认格式中都包含$version变量例如 Python 模块的默认格式为via $symbol($version )因此每次进入项目目录都会探测并渲染运行时版本。No Runtime Versions预置的定位十分明确隐藏语言运行时的版本号同时保留语言图标。官方文档给出的适用人群是如果你工作在容器或虚拟化环境中这个预置就是为你准备的。典型场景包括容器 / Docker 镜像内镜像内通常只装一个固定版本的工具链版本号对开发者没有增量信息反而挤占提示符宽度虚拟化 / 远程开发环境通过 SSH、Dev Container、VM 等进入环境时提示符更应聚焦我在哪个目录、哪个分支而非环境里装了什么版本演示与录屏隐藏版本号可避免截图/录屏中暴露环境细节也让提示符更简洁团队固定工具链当版本由 CI 或容器编排统一锁定时终端里重复展示版本属于冗余信息。预置保留的是via/with连接词与$symbol图标因此提示符仍能一眼看出当前项目是什么语言只是不再显示具体版本。二、快速上手应用预置官方文档给出的应用命令只有一行starship preset no-runtime-versions -o ~/.config/starship.toml其中starship preset是 Starship 内置的子命令负责输出某个预置的 TOML 配置no-runtime-versions是预置名称即No Runtime Versions的 kebab-case 形式-o--output指定输出文件这里直接写回 Starship 的全局配置文件~/.config/starship.toml。执行后预置会覆盖你现有的~/.config/starship.toml。如果该文件已存在且你希望保留原有自定义配置建议先备份或改用下面的方式将预置内容与现有配置合并# 1. 先查看预置内容输出到 stdout不做任何写入 starship preset no-runtime-versions # 2. 追加/合并到已有配置示意 starship preset no-runtime-versions ~/.config/starship.toml如果目标文件已存在preset命令默认会拒绝覆盖并报错需要追加--force参数强制写入对应 print.rs 中force参数与write_file_atomic的覆盖逻辑。执行完成后重新打开终端或执行exec $SHELL即可看到效果。另外可以通过--list参数列出所有可用的预置名称starship preset --listpreset子命令的完整 CLI 定义位于 src/main.rs包含预置名称、输出文件、强制覆盖与列表四个选项分发逻辑在 src/main.rs 处调用print::preset_command。三、预置配置逐模块解析该预置的完整配置位于 docs/public/presets/toml/no-runtime-versions.toml内容如下$schema https://starship.rs/config-schema.json [bun] format via $symbol [buf] format with $symbol [c] format via $symbol($name) [cmake] format via $symbol [cobol] format via $symbol [cpp] format via $symbol($name) [crystal] format via $symbol [daml] format via $symbol [dart] format via $symbol [deno] format via $symbol [dotnet] format $symbol( $tfm ) [elixir] format via $symbol [elm] format via $symbol [erlang] format via $symbol [fennel] format via $symbol [fortran] format via $symbol [gleam] format via $symbol [golang] format via $symbol [gradle] format via $symbol [haskell] format via $symbol [haxe] format via $symbol [helm] format via $symbol [java] format via $symbol [julia] format via $symbol [kotlin] format via $symbol [lua] format via $symbol [maven] format via $symbol [meson] format via $symbol [mojo] format with $symbol [nim] format via $symbol [nodejs] format via $symbol [ocaml] format via $symbol(\($switch_indicator$switch_name\) ) [odin] format via $symbol [opa] format via $symbol [perl] format via $symbol [php] format via $symbol [pixi] format via $symbol($environment ) [pulumi] format via $symbol$stack [purescript] format via $symbol [python] format via $symbol [quarto] format via $symbol [raku] format via $symbol [red] format via $symbol [rlang] format via $symbol [ruby] format via $symbol [rust] format via $symbol [scala] format via $symbol [solidity] format via $symbol [swift] format via $symbol [typst] format via $symbol [vagrant] format via $symbol [vlang] format via $symbol [xmake] format via $symbol [zig] format via $symbol整份配置的核心手法只有一招把每个语言模块的format从默认的连接词 图标 版本号改写为连接词 图标即删掉$version变量。配置文件开头的$schema字段声明了这份 TOML 遵循 Starship 官方配置 JSON Schema对应仓库中的 docs/public/config-schema.json编辑器可据此获得自动补全与校验。3.1 三种基本格式模板覆盖 55 个模块的配置可以归纳为三个模板模板含义应用模块部分via $symbol默认连接词via 语言图标无版本python、rust、nodejs、java、ruby、go 等绝大多数模块with $symbol连接词换成with 图标buf、mojo$symbol(...)图标保留但括号内只保留名字类变量c/cpp、dotnet、ocaml、pixi、pulumi$symbol是语言图标变量$style继承自各模块的style配置项保留原有的前景/背景色连接词via/with是 Starship 在工具类模块前的默认措辞。换句话说这份预置只动格式不动样式隐藏版本后配色和图标与原版完全一致。3.2 保留名字而非版本的特例模块少数模块的format并未简单地删到只剩图标而是保留了除版本以外的信息型变量这是该预置最值得注意的设计细节c / cppvia $symbol($name)—— 保留编译器名称如gcc/clang隐藏编译器版本dotnet$symbol( $tfm )—— 保留目标框架标识Target Framework Moniker如net8.0隐藏 SDK 版本号ocamlvia $symbol(\($switch_indicator$switch_name\) )—— 保留 opam switch 指示符与 switch 名称隐藏 OCaml 编译器版本pixivia $symbol($environment )—— 保留 pixi 环境名隐藏版本pulumivia $symbol$stack—— 保留栈stack名称隐藏 Pulumi 版本。这种取舍逻辑很清晰在容器/虚拟化场景中正在用哪个工具链/环境/框架目标依然是有用的上下文而工具本身的版本号则被判定为噪音。若你想隐藏得更彻底比如连编译器名、tfm 一起隐藏参照 3.1 的第一种模板自行改写即可。四、源码视角preset 命令如何工作starship preset并不是去磁盘上读取某个文件而是在编译期把预置配置内嵌进二进制运行时直接取出并写出。这一机制可以从 src/print.rs 的相关实现得到印证Preset 结构体与 ValueEnum 实现Preset(pub static str)是一个静态字符串包装value_variants()通过shadow::get_preset_list()获取全部预置名称这也解释了--list为什么能列出预置清单preset_command 函数根据--list直接打印预置列表否则通过shadow::get_preset_content(variant.0)取回预置 TOML 内容再依据是否传入-o决定写入文件write_file_atomic支持--force覆盖还是输出到 stdoutpreset_list 函数遍历Preset::value_variants()逐行输出预置名。仓库还为该命令提供了单元测试见 src/print.rs覆盖了列表非空、正确输入不 panic、输出到文件、强制覆盖已有文件等路径其中preset_command_output_to_file测试直接以include_str!(../docs/public/presets/toml/nerd-font-symbols.toml)比对输出内容印证了docs 下的 TOML 与二进制内嵌内容一致这一事实。no-runtime-versions.toml与nerd-font-symbols.toml位于同一目录docs/public/presets/toml/采用完全相同的内嵌机制。五、验证效果与自定义进阶5.1 验证效果应用预置后官方提供的效果截图为 docs/public/presets/img/no-runtime-versions.png展示了在多个语言项目如 Rust、Python、Node.js 项目之间切换时提示符的表现目录、Git 分支与 Git 状态正常显示语言图标、、⚡等与via连接词保留而各语言版本号被隐藏。该截图与预置文档中的插图一一对应。也可以在任意语言项目目录下直接验证starship preset no-runtime-versions # 输出完整预置配置 starship preset --list # 确认 no-runtime-versions 在列表中5.2 只对部分模块隐藏版本预置一次性改写 55 个模块如果你只想隐藏个别语言的版本例如只隐藏 Python 版本完全不必应用整个预置手动在~/.config/starship.toml中针对单个模块覆写format即可[python] format via $symbol其余模块保持默认行为不变。这条规则的原理与预置完全相同——format中不写$version模块就不会渲染版本号版本探测逻辑位于各模块源码中例如 Python 模块的version变量处理见 src/modules/python.rs。5.3 反向操作恢复版本显示若之后想恢复默认的版本展示删除~/.config/starship.toml中对应的[xxx] format行或直接删除整个配置文件让 Starship 回落到内置默认配置即可。默认配置定义在各模块源码的default()方法中例如 Python 模块默认格式包含$version变量。六、注意事项覆盖行为starship preset no-runtime-versions -o ~/.config/starship.toml会整体覆盖目标文件执行前请确认是否已有自定义配置需要合并或备份只影响格式不影响探测预置只是删除了format中的$version变量各模块何时显示仍由detect_files、detect_extensions、detect_folders、detect_env_vars等探测规则决定未安装对应工具链时模块依旧不会出现这与No Empty Icons等其他预置的职责不同连接词差异buf与mojo使用with而非via这是刻意保留的措辞差异不是笔误图标依赖保留的$symbol图标多为 Nerd Font 字符若终端未安装 Nerd Font可搭配仓库中的 No Nerd Fonts 预置 使用。七、更多预置与延伸阅读预置总览与社区提交入口docs/ru-RU/presets/README.md本文所依据的原始文档docs/ru-RU/presets/no-runtimes.md英文版见 docs/presets/no-runtimes.md本预置的完整 TOMLdocs/public/presets/toml/no-runtime-versions.toml效果截图docs/public/presets/img/no-runtime-versions.pngpreset 命令源码与测试src/print.rs、CLI 参数定义见 src/main.rs。按需应用本预置你可以在容器、虚拟化或固定工具链环境中获得更干净、更聚焦的 Starship 提示符理解其改写 format 以剔除版本变量的机制后你也能自由定制出只属于自己的精简版提示符。【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考