ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Starship No Empty Icons 预设完全解析:让工具图标只在版本可识别时出现

Starship No Empty Icons 预设完全解析:让工具图标只在版本可识别时出现 Starship No Empty Icons 预设完全解析让工具图标只在版本可识别时出现【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starshipStarship 是一个极简、极速、可无限自定义的跨 shell 提示符prompt项目。当你在某个包含Cargo.toml、package.json、*.rs等工程文件的目录中工作Starship 会自动扫描并显示对应工具链的图标与版本号。No Empty Icons 是官方维护的一组 Preset预设配置它的用途非常聚焦只有当工具链的版本信息真正被探测到时才显示该工具的图标否则连同图标一起隐藏整个模块从而避免提示符里出现孤零零一个图标、却没有版本号的视觉噪音。读完本文你将掌握这个预设的默认行为差异、底层 format 字符串机理、一键安装方法以及如何按需裁剪配置。一、这个预设解决什么问题默认行为 vs 预设行为No Empty Icons 预设文档本文依据的多语言版本之一与 英文原版 内容一致对本预设给出了准确描述默认行为只要识别出工具集文件toolset files工具集图标就会被显示而当工具本身缺失、无法据此确定版本号时版本号这一部分不会被显示。预设行为将上面的逻辑反转过来——只有当工具集信息尤其是版本号能被确定时才显示图标一旦版本无法探测图标连同一整段内容一起消失。换句话说默认配置可能出现有图标无版本的输出而 No Empty Icons 追求的是要么图标与版本一起出现要么都不出现。官方 Preset 总览页 docs/presets/README.md 对它的概括也正是This preset does not show icons if the toolset is not found.当工具集不存在时不显示图标。以下截图即官方仓库中该预设的效果预览二、工作原理一行 format 字符串背后的条件渲染机制要理解这个预设为什么能实现图标随版本一起消失需要先理解 Starship 模块的format字符串语法。每个模块如 Rust、Python、Node.js都由一个format字段驱动渲染其中的三个基本元素是普通文本如via、with原样输出。变量如$symbol图标、$version版本号、$tfm目标框架、$otp_versionErlang/OTP 版本渲染时替换为实际值若对应信息探测不到变量解析结果为空。条件组( ... )仅当组内引用的全部变量都能解析出非空值时整组内容才被渲染否则整组被丢弃。这条规则正是本预设的核心杠杆其实现可见 src/formatter/string_formatter.rs源码注释明确写着当内部所有变量均为空时则不显示该条件组Show the conditional format string if all the variables inside are not none or empty string。样式段...对其中内容套用style指定的前景色/背景色等样式。以 Rust 模块为例其默认format定义在 src/configs/rust.rs# 默认default format via $symbol($version )其中($version )是一个条件组当rustc/rustup无法给出版本时比如环境中没有安装 Rust 工具链该组被丢弃但via 仍会输出——于是出现一个没有版本号的空图标。而本预设把整个格式串包进一层外层条件组# No Empty Icons 预设 format (via $symbol($version ))$version无法解析时外层( ... )判定组内变量为空于是via、图标、样式段全部被丢弃模块整体输出为空、从提示符中消失。这就是只显示能被确定的工具信息这一行为的直接来源。需要注意这一判断的触发点发生在每个模块真正执行探测命令之后从 src/modules/rust.rs 的模块逻辑可以看出模块先通过detect_files/detect_extensions扫描确定当前目录属于何种项目再调用版本探测命令获取版本只有当探测结果为空时$version才渲染为空外层条件组才被跳过。三、如何安装与启用根据预设文档官方推荐的一键式启用命令为starship preset no-empty-icons -o ~/.config/starship.toml这条命令会把预设内容写入~/.config/starship.toml即 Starship 的全局配置文件。该命令使用了-o/--output之类的输出参数将结果落盘具体可用参数可执行starship preset --help查看你本机版本的帮助说明。手动方式同样可行预设内容本身就是一个独立的 TOML 片段存放在仓库的 docs/public/presets/toml/no-empty-icons.toml你可以直接下载后合并进自己的配置。[!TIP] 配置落盘提醒 如果你现有的~/.config/starship.toml中已经写有大量自定义内容直接执行上述-o命令可能会以预设内容覆盖既有文件。更稳妥的做法是先备份现有配置或仅把下文第四节中你需要的模块[xxx]表手动合并进原配置。无论采用哪种方式Starship 都会在配置变更后于下一次渲染提示符时读取新配置无需重新安装或重启 shell。四、预设的完整内容全量 TOML该预设一次性改写了46 个版本类模块的format覆盖绝大多数带版本探测的语言与构建工具。完整内容如下与 docs/public/presets/toml/no-empty-icons.toml 保持一致$schema https://starship.rs/config-schema.json [buf] format (with $symbol($version )) [bun] format (via $symbol($version )) [c] format (via $symbol($version(-$name) )) [cpp] format (via $symbol($version(-$name) )) [cmake] format (via $symbol($version )) [cobol] format (via $symbol($version )) [crystal] format (via $symbol($version )) [daml] format (via $symbol($version )) [dart] format (via $symbol($version )) [deno] format (via $symbol($version )) [dotnet] format (via $symbol($version )( $tfm )) [elixir] format (via $symbol($version \(OTP $otp_version\) )) [elm] format (via $symbol($version )) [erlang] format (via $symbol($version )) [fennel] format (via $symbol($version )) [fortran] format (via $symbol($version )) [gleam] format (via $symbol($version )) [golang] format (via $symbol($version )) [haskell] format (via $symbol($version )) [helm] format (via $symbol($version )) [java] format (via $symbol($version )) [julia] format (via $symbol($version )) [kotlin] format (via $symbol($version )) [lua] format (via $symbol($version )) [nim] format (via $symbol($version )) [nodejs] format (via $symbol($version )) [ocaml] format (via $symbol($version )(\($switch_indicator$switch_name\) )) [opa] format (via $symbol($version )) [package] format (is $symbol$version ) [perl] format (via $symbol($version )) [php] format (via $symbol($version )) [purescript] format (via $symbol($version )) [python] format (via ${symbol}${pyenv_prefix}(${version} )(\($virtualenv\) )) [quarto] format (via $symbol($version )) [raku] format (via $symbol($version-$vm_version )) [red] format (via $symbol($version )) [rlang] format (via $symbol($version )) [ruby] format (via $symbol($version )) [rust] format (via $symbol($version )) [scala] format (via $symbol($version )) [swift] format (via $symbol($version )) [typst] format (via $symbol($version )) [vagrant] format (via $symbol($version )) [vlang] format (via $symbol($version )) [xmake] format (via $symbol($version )) [zig] format (via $symbol($version ))五、46 个模块的内容分类与差异点速查虽然绝大多数条目结构相同但其中一部分模块因自身变量较多改写方式并不完全一样值得逐一区分模块预设 format 的差异点说明buf前缀词为with该模块默认文案即 with区别于其余模块的 viac、cpp($version(-$name))版本后还附带一个可选的编译器/实现名称条件组dotnet($version)( $tfm)额外包含目标框架Target Framework变量$tfmelixir(OTP $otp_version)版本之外还会显示 OTP 版本用转义括号包裹ocaml($switch_indicator$switch_name)额外包含 switch切换开关相关变量package前缀词为is直接形如 is [v1.2.3]package无图标展示来自package.json等清单文件的包版本python${symbol}${pyenv_prefix}(${version})(\($virtualenv\))保留pyenv前缀与虚拟环境名变量的条件显示raku($version-$vm_version)同时显示 Raku 版本与其虚拟机MoarVM 等版本fortran双引号字符串内容与其他via型一致仅 TOML 引号写法不同其余 37 个模块(via $symbol($version ))bun、cmake、cobol、crystal、daml、dart、deno、elm、erlang、fennel、fortran、gleam、golang、haskell、helm、java、julia、kotlin、lua、nim、nodejs、opa、perl、php、purescript、quarto、red、rlang、ruby、rust、scala、swift、typst、vagrant、vlang、xmake、zig值得注意的一点是这些改写的外层包裹方式高度统一——都是把原先不带外层条件的默认format整段塞进( ... )。你可以对照各模块在 src/configs 中的默认实现来观察这一规律例如Rust 默认via $symbol($version )出自 src/configs/rust.rsPython 默认via ${symbol}${pyenv_prefix}(${version} )(\\($virtualenv\\) )出自 src/configs/python.rsbuf 默认with $symbol($version )出自 src/configs/buf.rs。由此可以总结出一个通用经验如果你未来希望让任意图标版本型模块也遵循版本不可知即整段隐藏的规则只需要把它的默认format用一对圆括号整体包起来即可No Empty Icons 本质上是把这条规则批量应用到了 46 个模块上。六、适用场景与定制建议这个预设最适合以下几类使用者经常在未安装完整工具链的环境中工作例如切换频繁的 CI 容器、DevContainer、远程服务器机器上保留了项目文件如Cargo.toml、go.mod但对应编译器cargo、go尚未安装不希望提示符反复出现只有图标没有版本的模块追求提示符信息的可信度坚持出现的内容必须信息完整。如果你只想对其中个别模块生效、而非全局套用可以在手动合并时仅摘取所需条目例如只隐藏无版本的 Rust 模块[rust] format (via $symbol($version ))另外需要注意这个预设只改写具备版本探测语义的模块诸如directory、git_branch、character等与工具链版本无关的模块完全不受影响它也独立于其他官方预设如 No Runtime Versions 是去掉版本只留图标与没版本就连图标一起隐藏的 No Empty Icons 思路恰好相反可按需搭配或择一使用。若与其它同时改写format的预设叠加后写入的模块format会覆盖先前的值合并时需自行取舍。七、验证方式与小结启用后如何验证效果在任意包含语言项目文件、但对应工具链未安装的目录中重新渲染提示符即可——如果 No Empty Icons 已生效该语言的图标与 via ... 字样应整体消失而在已安装完整工具链的目录中图标与版本号会同时正常出现。两种场景的对比截图即官方仓库中的 docs/public/presets/img/no-empty-icons.png。若需手动核对配置合法性可使用仓库中生成的 JSON Schema 进行编辑器内校验见 docs/public/config-schema.json预设 TOML 首行的$schema字段即指向该校验入口。归根结底No Empty Icons 通过一层统一的外层条件组把显示内容必须是可被证实的工具信息这一原则贯彻到了全部 46 个工具链模块。理解它的工作原理之后你不仅能熟练安装这一预设也能举一反三地利用format字符串的括号分组语法为自己定制出信息缺失即隐藏的各类模块行为。本预设的完整 TOML 文件同时提供了官方下载路径 docs/public/presets/toml/no-empty-icons.toml可与本文内容逐一对照。【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表