首页
/ Starship No Runtime Versions 预设:在容器与虚拟化环境中隐藏语言运行时版本

Starship No Runtime Versions 预设:在容器与虚拟化环境中隐藏语言运行时版本

2026-09-08 14:53:32作者:袁立春Spencer

导读

No Runtime Versions 是 Starship 内置的社区预设(Preset),其核心作用是通过为各语言运行时模块重写 format 字符串,隐藏提示符中检测到的运行时版本号,仅保留语言图标与必要的上下文信息。如果你经常工作在 Docker 容器、虚拟机或共享开发机中(此时提示符中的 v20.11.03.12.1 这类版本号往往是噪声),这篇指南将带你了解该预设的适用场景、启用命令、完整 TOML 内容与它的实现原理。读完你既能一键套用,也能理解它是如何做到"只藏版本、不丢上下文"的,从而灵活地把同样手法合并进自己的 starship.toml

一、这个预设解决什么问题

对应文档 docs/pl-PL/presets/no-runtimes.md(及其英文原版 docs/presets/no-runtimes.md)对该预设的描述非常直白:它隐藏语言运行时(runtime)的版本信息,特别适合在容器(containers)或虚拟化环境(virtualized environments)中工作的用户

容器镜像通常会"钉死"一套运行时版本(例如镜像内固定 Node.js 18),进入容器后每个目录都显示同样的 node v18.19.0 意义不大;此时把横条收缩为"有一个 Node 运行时在工作目录生效",提示符会显著更干净、也更贴合"环境由镜像保证"的心智模型。下面是该预设的官方效果截图:

Starship No Runtime Versions 预设的运行效果截图(各语言模块只显示图标,不再输出版本号)

二、一键启用:命令与参数说明

docs/pl-PL/presets/no-runtimes.md 中给出的启用命令如下:

starship preset no-runtime-versions -o ~/.config/starship.toml

这条命令把内置预设写入 Starship 的默认配置文件。要理解各参数,可以对照 src/main.rspreset 子命令的定义,它由 src/print.rspreset_command 负责执行:

命令形式 作用
starship preset no-runtime-versions 把该预设的 TOML 内容打印到标准输出(stdout),先预览再决定是否应用
starship preset no-runtime-versions -o ~/.config/starship.toml 将预设内容写入指定文件,即 Starship 默认配置,开箱即用
starship preset --list 列出二进制内置的全部预设名称(由 preset_list 输出,见 src/print.rs
starship preset no-runtime-versions -o 目标文件 --force 当目标文件已存在时强制覆盖写入

其中 --output(短选项 -o)用于"输出到文件而非 stdout",而"文件已存在时是否覆盖"由 force 标志控制——这与 src/print.rspreset_command_output_existing_file_force 测试覆盖的"向已存在文件输出"路径相互印证。写入完成后重新加载配置(新开一个 shell 或执行 exec $SHELL)即可生效。

注意:-o ~/.config/starship.toml 会直接覆盖整个配置文件。如果你已经手写了很多自定义配置,请先备份,或参考本文第六节的手动合并方式。

三、预设内容全解析

该预设的完整 TOML 维护在仓库 docs/public/presets/toml/no-runtime-versions.toml,与 Starship 官方文档目录中"Config Schema"对应的 docs/public/config-schema.json 配套,第一行 "$schema" 即指向该 JSON Schema,用于在编辑器中获得补全与校验。

3.1 工作原理:覆盖 format、摘掉 $version

Starship 中每个运行时模块(如 nodejspythonrust)的渲染结果由各自的 format 模板决定,其中版本号通常由形如 $version 的变量占位并提供。该预设没有去关停某个模块,而是为数十个语言模块逐个重写 format:保留 $symbol(模块图标),删掉渲染版本的那部分变量。以 nodejs 为例,原样摘录如下:

[nodejs]
format = 'via $symbol'

对比模块默认格式中"via $symbol($version )"这类写法可以直观看到:$version 连同其外层的括号、空格一并被移除,最终提示符只会出现 Node 的图标。而整个文件的配置骨架非常统一,例如 Python、Rust、Java、Go:

[python]
format = 'via $symbol'

[rust]
format = 'via $symbol'

[java]
format = 'via $symbol'

[golang]
format = 'via $symbol'

3.2 并不是一刀切:保留必要上下文变量的模块

细读完整 TOML 可以发现,预设作者在"隐藏版本"之外还谨慎保留了部分模块真正有信息量的变量,这正是该预设值得逐行研究的地方:

[c]
format = "via $symbol($name)"

[cpp]
format = "via $symbol($name)"

[ocaml]
format = 'via $symbol(\($switch_indicator$switch_name\) )'

[dotnet]
format = "$symbol(🎯 $tfm )"

[pixi]
format = 'via $symbol($environment )'

[pulumi]
format = 'via $symbol$stack'
模块 隐藏掉的 仍然保留的
c / cpp 编译器版本 $name(检测到的编译器名称)
ocaml 编译器版本 $switch_indicator$switch_name(当前 opam switch)
dotnet SDK 版本 $tfm(目标框架,带 🎯 前缀)
pixi 环境版本 $environment(当前 pixi 环境名)
pulumi 版本 $stack(当前栈名)
mojo / buf 版本 仅保留图标,且连接词分别改写为 with 而非 via

也就是说,这个预设的设计取向是"去掉与镜像锁定内容强相关的版本号,保留与当前工作区/工程状态强相关的上下文"。

四、覆盖的语言模块全景

No Runtime Versions 覆盖的模块在 TOML 中均以模块名作为段头。为便于快速核对与你相关的语言是否在列,下表按生态归类(段头名称与 TOML 中完全一致,格式均为 via $symbol,带 * 者另有保留字段):

生态 模块
JavaScript / TypeScript bundenonodejs
系统级 / 编译语言 ccpprustzigswiftmojo*、odinvlangnimredfortrancobolraku
JVM 系 javagradlekotlinscalamaven
脚本语言 pythonrubyperlphpluarlangjuliadartelixirerlangelisp 类(fennel)、haskellocaml*、purescriptgleamcrystaldaml
工具链 / 构建 cmakemesonxmakehelmbuf*、opaquartotypstvagrant
云 / 环境 pulumipixidotnet*

提示:该清单以 docs/public/presets/toml/no-runtime-versions.toml 现有段头为准。个别 Starship 模块(如 gcloudawsdocker_context)本就不渲染"语言版本",自然不在本预设范围内。

五、从源码看 preset 是如何交付的

这套机制的工程实现值得顺带了解,便于你判断命令行为的边界:

  • 命令入口定义在 src/main.rs:CLI 帮助文本写明其作用是"打印一个预设配置"(Prints a preset config),可选参数包括预设名、-o/--output 输出文件、--list 列出全部预设,并在 src/main.rs 处将请求分发到 print::preset_command
  • 执行逻辑集中在 src/print.rs:当 list 为真时打印预设清单;否则根据预设名取出预设内容,写入 output 指定的文件或直接输出到 stdout。预设正文的获取经由 shadow::get_preset_content,返回的内容即仓库 docs/public/presets/toml 下对应 TOML 的完整文本。
  • src/print.rs 中的测试覆盖了三条关键路径:preset_list_returns_one_or_more_items(清单非空)、preset_command_does_not_panic_on_correct_inputs(对每个内置预设调用不 panic)、preset_command_output_to_filepreset_command_output_existing_file_force(写入文件以及覆盖已存在文件的场景)。测试中通过 include_str!("../docs/public/presets/toml/nerd-font-symbols.toml") 比对输出,由此可以推断:预设 TOML 是作为资源随二进制一同构建、并在运行时被读取的。

因此无需联网即可使用 starship preset,也意味着你安装的 Starship 版本决定它内置的预设快照;若想更新到社区最新修订的预设内容,升级 Starship 即可。

六、进阶玩法:把它合并进现有自定义配置

因为预设本质就是"每个模块一段 format 覆盖",你完全不必整文件覆盖。若你的 ~/.config/starship.toml 已积累了大量自定义,只需要把预设中你关心的模块段落摘出、追加到你的配置中即可。例如只想隐藏 Node 与 Python 的版本:

[nodejs]
format = 'via $symbol'

[python]
format = 'via $symbol'

同理,若你只想"恢复某一个模块的版本号",删除或注释掉该模块对应的 format 覆盖行,Starship 就会回落到该模块的默认 format。也就是说,这套预设与普通配置遵循完全相同的 TOML 合并规则,可以按模块粒度自由组合。

七、其它相关信息

  • 该预设对应的独立页面位于 docs/pl-PL/presets/no-runtimes.md,波兰语索引页见 docs/pl-PL/presets/README.md
  • 完整预设家族的英文总索引位于 docs/presets/README.md,其中的 "No Runtime Versions" 卡片即指向该预设。
  • 官方对该预设的命名有两处写法:命令/文件名使用中划线连字符 no-runtime-versions(对应 TOML 文件名 no-runtime-versions.toml),而文档页面文件名使用复数缩写 no-runtimes.md——两者指代同一个预设,命令中请务必使用前者。
  • 若主题相近,可顺带对比 docs/presets/no-empty-icons.md(不显示空图标)与 docs/presets/no-nerd-font.md(不依赖 Nerd Font),它们同属"通过覆盖各模块格式让提示符更克制"的一类社区预设,实现手法彼此相通。
登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
898
5.82 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
921
1.84 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.8 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
531
596
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.02 K
519
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.36 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
391