
Starship no-runtime-versions 预设详解在容器与虚拟化环境中隐藏语言运行时版本【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starshipStarship 官方提供了一组可一键应用的 Preset预设其中no-runtime-versions预设专门用于在提示符中隐藏各类语言运行时的版本号只保留语言图标符号。本文围绕该预设的官方文档展开说明其适用场景容器、虚拟化等环境即版本的场景、给出官方的一键配置命令完整收录预设的全部 TOML 配置内容并逐段解析它是如何覆盖各语言模块的format变量来达成去版本号效果的最后结合仓库源码说明starship preset子命令的底层实现机制。一、这个预设解决什么问题官方文档docs/ar-SA/presets/no-runtimes.md内容与英文原版一致对 No Runtime Versions Preset 的定位非常明确This preset hides the version of language runtimes. If you work in containers or virtualized environments, this one is for you!也就是说该预设隐藏语言运行时的版本信息。它面向的典型用户是在容器Docker 等或虚拟化环境中工作的开发者——在这类环境里基础镜像已经固化了运行时版本提示符中反复显示via node v20.x、via py v3.11这类信息往往只是噪声一方面拉长提示符、拖慢视觉扫读另一方面容器内的版本号还可能与宿主机/CI 环境不一致反复闪烁反而造成干扰。Starship 的每一个语言模块nodejs、python、rust、golang 等默认都会在format中渲染$version变量。从源码结构看nodejs 模块的默认配置 即为format: via $symbol($version ), version_format: v${raw},python 模块 的默认format同样内嵌了${version}并额外带 virtualenv 名称。no-runtime-versions 预设所做的就是把这 50 多个语言模块的format全部改写成只含$symbol以及个别模块需要保留的$name/$tfm/$stack等非版本变量的形态从而在保留当前目录属于哪种语言这一信号的同时去掉版本号。二、一键应用预设官方文档给出的配置方式为一条命令starship preset no-runtime-versions -o ~/.config/starship.toml-o参数表示将预设内容直接写入目标配置文件如果文件已存在需要追加-fforce才会强制覆盖。不指定-o时预设 TOML 会打印到标准输出方便先检查再落盘。预设的原始 TOML 存放在仓库中no-runtime-versions.toml文档页面同时提供该文件的下载入口。下面完整收录这份预设的全部配置共 55 个模块段$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预设覆盖的模块清单这份配置共覆盖 55 个语言/工具类模块bun、buf、c、cmake、cobol、cpp、crystal、daml、dart、deno、dotnet、elixir、elm、erlang、fennel、fortran、gleam、golang、gradle、haskell、haxe、helm、java、julia、kotlin、lua、maven、meson、mojo、nim、nodejs、ocaml、odin、opa、perl、php、pixi、pulumi、purescript、python、quarto、raku、red、rlang、ruby、rust、scala、solidity、swift、typst、vagrant、vlang、xmake、zig。两点使用注意第一行的$schema是 JSON Schema 提示指向 Starship 的配置模式文件作用只是让编辑器对starship.toml做语法补全与校验运行时并不依赖它可保留也可删除。预设只改format不关闭模块本身。也就是说应用该预设后只要当前目录存在对应语言的标记文件如package.json、Cargo.toml、.python-version等对应模块仍会显示——只是从via v20.11.0变成了via加一个语言图标。如果你希望完全不显示某些语言模块仍需在预设基础上追加disabled true。三、逐段解析哪些版本被保留、为什么预设的大多数段落是同一个模板format via $symbol——只输出前缀词 图标$style是着色变量与版本无关。但有几类例外恰恰体现了预设作者对版本号与环境标识的区分模块预设 format保留的变量含义c / cppvia $symbol($name)$name编译器/工具链名称如 clang、gcc并非版本号dotnet$symbol( $tfm )$tfm.NET 目标框架如net8.0属于目标平台而非 SDK 版本pixivia $symbol($environment )$environmentpixi 虚拟环境名pulumivia $symbol$stack$stackPulumi 当前栈名ocamlvia $symbol(\($switch_indicator$switch_name\) )切换指示符与名称OPAM/工具链切换的当前名称buf / mojowith $symbol无仅前缀词不同with而非via同样去掉了版本此外 cmake、crystal、cobol 等原本默认 format 中携带$version的模块也统一被改写为纯图标形态。可以看出预设的取舍标准是描述当前环境的版本一律隐藏描述当前上下文是谁的信息编译器名、目标框架、环境名、栈名予以保留这样在容器里切换多个语言项目时提示符依然能一眼分辨语言类型只是不再冗余展示版本。四、底层机制starship preset子命令如何实现从源码结构看starship preset的实现在两个文件中src/main.rs 中定义了Preset子命令参数包括预设名name通过 clap 的value_enum校验非法名称会直接报错、-o/--output写入文件而非 stdout、-f/--force目标文件已存在时强制覆盖依赖-o、-l/--list列出所有可用预设名。src/print.rs 的preset_command负责执行-l时调用preset_list()输出全部预设名否则通过shadow::get_preset_content(name)取出对应预设的 TOML 原文要么原子写入-o指定的文件失败时以退出码 1 结束要么打印到 stdout。预设名称本身就是受约束的枚举Preset实现了 clap 的ValueEnum其取值来自shadow::get_preset_list()也就是说no-runtime-versions必须是内置预设清单中的一员才可通过参数校验。仓库中对应的测试src/print.rs 内preset_list_returns_one_or_more_items、preset_command_output_to_file、preset_command_output_existing_file_force等验证了列表非空、按名取内容、写文件及-f强制覆盖这几条路径的行为。理解了这一机制后可以推断由于get_preset_content直接返回预设 TOML 的原文starship preset no-runtime-versions不带-o的输出与仓库中 no-runtime-versions.toml 的内容是一致的——这意味着你可以随时把预设内容拉出来与手工维护的~/.config/starship.toml做 diff确认哪些行被预设改动、哪些是你自己的自定义避免升级预设时误伤个性化配置。五、实践建议容器/虚拟化用户直接应用预设配合文档给出的效果截图可以看到Node、Python 等模块只剩图标提示符明显更短。混合环境用户如果只有个别语言想隐藏版本例如只想去掉 node 的版本号不需要套用整个预设只复制对应的单段[nodejs]\nformat via $symbol即可这正是预设内容按模块独立成段带来的好处。升级维护Starship 新增语言模块后预设 TOML 会在仓库中同步更新重新执行starship preset no-runtime-versions -o ~/.config/starship.toml -f前先 diff 一下现有配置再决定整体覆盖还是手动合并。与其他预设的关系本预设只调整语言模块的format不与 no-nerd-font替换图标为纯文本这类改图标的预设冲突二者可以叠加使用。综上no-runtime-versions 预设通过一份覆盖 55 个模块的format配置把 Starship 提示符中所有语言运行时版本号统一收敛为纯图标形态是容器和虚拟化开发场景下信息降噪的官方现成方案一条命令即可完成配置且预设原文对每个模块的作用都清晰可见、可局部摘用。【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考