Starship Bracketed Segments 预设实战:用方括号统一模块排版并看懂 format 字符串语法 Starship Bracketed Segments 预设实战用方括号统一模块排版并看懂 format 字符串语法【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship本指南围绕 Starship 官方社区预设Bracketed Segments展开讲解该预设如何把提示符中所有内置模块的默认引导文字如 via、on替换为整齐的方括号排版并给出可直接复制的完整 TOML 配置。文中将同时从 预设总览对应本地化副本 docs/no-NO/presets/bracketed-segments.md、starship preset子命令源码与各模块默认配置入手帮助你理解 format 字符串的语法、掌握一键应用与按模块定制的方法。预设做什么用方括号取代 via / on 引导词Starship 的提示符由大量模块module拼接而成。默认情况下很多语言与工具模块在展示信息前会带一段固定的引导文字例如语言运行时会显示via v1.58.1这样的前缀云服务模块会显示on ☁️ ...这样的前缀。这些引导词的来源可以在每个模块的默认配置中直接看到。以 aws.rs 为例其默认format是format: on [$symbol($profile )(\\($region\\) )(\\[$duration\\] )]($style),再如 bun.rs 与 c.rs默认格式分别为via $symbol($version )与via $symbol($version(-$name) )。可见via / on 是写在花哨段styled segment之外的普通文本。Bracketed Segments 预设做的事非常聚焦把每个内置模块的format整体改写为\[...\]的形式——用一对字面方括号把原本带样式的模块内容包起来同时去掉 via、on 这类引导词。从上图可见最终提示符中每个信息段都变成了紧凑的方括号形态例如分支模块[⤴ trunk]包版本模块[ v1.1.0]Rust 工具链[ v1.58.1]Node.js 版本[ v17.6.0]命令耗时[⏱ 3s]root 用户[root]该预设属于社区提交预设集合中的一员与其并列的还有 Nerd Font Symbols、No Nerd Fonts、Plain Text Symbols 等完整索引见 docs/presets/README.md。一键应用starship preset 命令在已经安装并初始化 Starship 的前提下应用该预设只需一条命令starship preset bracketed-segments -o ~/.config/starship.toml执行后预设内容会被写入 Starship 的默认配置文件~/.config/starship.toml随后重新加载配置即可看到效果重新打开终端或在当前 Shell 中再次执行eval $(starship init bash)之类初始化脚本。参数与用法变体从命令行入口的定义src/main.rs可以看到starship preset子命令支持以下选项选项含义约束name位置参数要导出的预设名取值受限于内置预设枚举与--list互斥时必填存在--list时可不填-o, --output path把预设写入指定文件而非打印到 stdout与--list冲突-f, --force当目标输出文件已存在时强制覆盖依赖--output同时出现-l, --list列出所有可用预设名不能与--output并用实际常用的几个姿势# 1. 只查看内置预设清单 starship preset --list # 2. 把 bracketed-segments 内容直接打印到终端不写文件便于预览或重定向 starship preset bracketed-segments # 3. 写入指定路径文件已存在时需加 --force 覆盖 starship preset bracketed-segments -o ~/.config/starship.toml -f# 4. 想在正式覆盖前先看当前生效配置与内置默认之间的差异可先备份 cp ~/.config/starship.toml ~/.config/starship.toml.bak命令背后的实现链路preset子命令的处理函数位于 src/print.rs。其逻辑为若传了--list就调用shadow::get_preset_list()枚举可用预设名否则调用shadow::get_preset_content(...)取出对应预设的 TOML 内容再按--output决定写入文件还是打印到 stdout。而预设内容的真身就是仓库 docs/public/presets/toml/ 目录下的 TOML 文件该目录同时提供bracketed-segments.toml等 12 个预设的下载与预览。文档页面中 /public/presets/toml/bracketed-segments.toml一行的作用就是把该文件原文注入页面展示。仓库还为这一命令内置了同步测试见 src/print.rs测试通过include_str!(../docs/public/presets/toml/...)比对输出与文档目录下的 TOML确保文档里的预设文件与命令导出的内容永远保持一致。原理看懂 format 字符串里的括号与转义要理解该预设为什么能把模块段装进方括号需要掌握 Starship format 字符串的三条规则带样式段内容表示把内容按样式渲染内容中可引用$symbol、$version、$branch、$user、$duration等模块变量样式占位$style会自动展开为该模块在配置中style键指定的颜色/样式因此预设里几乎每个模块都写作...等于把样式完全托付给模块自身少数模块还有$added_style、$deleted_style这类额外样式变量字面方括号转义普通文本中的[与]需写成\[与\]才能原样输出而不会被解析为段边界可选分组( ... )中的内容仅当内部变量有值时才显示例如($version)在没有版本信息时整组消失。基于以上规则默认写法与预设写法可以互相翻译模块默认 format简化Bracketed Segments 预设 formatgit_branchon $symbol$branch ...\[$symbol$branch\]rustvia $symbol($version)\[$symbol($version)\]cmd_durationtook ...\[⏱ $duration\]注意 TOML 文件中的 format 使用了单引号字面字符串因此\[、\]中的反斜杠会被原样保留最终由 Starship 的 format 解析器解释为输出一个字面[。于是每个模块输出形如[ 带样式的模块内容 ]完整 TOML 逐类剖析预设的完整内容存放在仓库 docs/public/presets/toml/bracketed-segments.toml与命令导出的内容完全一致。按其覆盖的模块可归纳为几大类① 语言与运行时版本如c、rust、python、nodejs、go、ruby等统一采用\[$symbol($version)\]这类模板图标 版本被方括号包住特殊一点的如 Python 还会带pyenv前缀与虚拟环境名[python] format \[${symbol}${pyenv_prefix}(${version})(\($virtualenv\))\]② 版本控制与代码指标git_branch、git_commit、git_status、git_state、git_metrics、fossil_*、hg_*、pijul_channel、jj_*、vcsh等。其中 git_status 保持默认的外层圆括号分组、内层方括号的形态而增删行统计拆成两个独立方括号段[git_status] format ([\[$all_status$ahead_behind\]]($style)) [git_metrics] format \[$added\]\[-$deleted\]③ 云平台、容器与远程环境aws、azure、gcloud、openstack、kubernetes、docker_context、container、netns、singularity、nix_shell、guix_shell、conda、direnv、spack、mise、pixi等。例如 aws 仍保留区域与耗时的可选分组[aws] format \[[$symbol($profile)(\($region\))(\[$duration\])]($style)\]④ 系统状态与用户信息battery、cmd_duration、time、memory_usage、jobs、status、sudo、username、hostname、shell、localip等。例如命令耗时带上了时钟符号[cmd_duration] format \[⏱ $duration\]⑤ 构建工具与包管理器cmake、gradle、maven、meson、xmake、bun、deno、npm相关模块以及helm、terraform、pulumi、opa等基础设施工具模板与语言类基本一致。未被覆盖的模块对照 src/configs 下全部内置模块可以发现character提示符图标、directory目录路径见截图中的rust-project保持无方括号、env_var、fill、line_break等不在本预设改写范围内——它们本就不使用 via/on 这类引导词排版。下面的完整配置可供直接复制保存$schema https://starship.rs/config-schema.json [aws] format \[[$symbol($profile)(\($region\))(\[$duration\])]($style)\] [azure] format \[$symbol($subscription)\] [battery] format \[$symbol$percentage\] [buf] format \[$symbol($version)\] [bun] format \[$symbol($version)\] [c] format \[$symbol($version(-$name))\] [cmake] format \[$symbol($version)\] [cmd_duration] format \[⏱ $duration\] [cobol] format \[$symbol($version)\] [conda] format \[$symbol$environment\] [container] format \[[$symbol \[$name\]]($style)\] [cpp] format \[$symbol($version(-$name))\] [crystal] format \[$symbol($version)\] [daml] format \[$symbol($version)\] [dart] format \[$symbol($version)\] [deno] format \[$symbol($version)\] [direnv] format \[$symbol$loaded/$allowed\] [docker_context] format \[$symbol$context\] [dotnet] format \[$symbol($version)( $tfm)\] [elixir] format \[$symbol($version \(OTP $otp_version\))\] [elm] format \[$symbol($version)\] [erlang] format \[$symbol($version)\] [fennel] format \[$symbol($version)\] [fortran] format \[$symbol($version)\] [fossil_branch] format \[$symbol$branch\] [fossil_metrics] format \[$added\]\[-$deleted\] [gcloud] format \[$symbol$account($domain)(\($region\))\] [git_branch] format \[$symbol$branch\] [git_commit] format \[\($hash$tag\)\] [git_metrics] format \[$added\]\[-$deleted\] [git_state] format \[$state ($progress_current/$progress_total)\] [git_status] format ([\[$all_status$ahead_behind\]]($style)) [gleam] format \[$symbol($version)\] [golang] format \[$symbol($version)\] [gradle] format \[$symbol($version)\] [guix_shell] format \[$symbol\] [haskell] format \[$symbol($version)\] [haxe] format \[$symbol($version)\] [helm] format \[$symbol($version)\] [hg_branch] format \[$symbol$branch\] [hostname] format \[$ssh_symbol($hostname)\] [java] format \[$symbol($version)\] [jj_bookmark] format \[$symbol$bookmark($remote)$diverged( \($overflow_count others\))\] [jj_change] format \[\($change\)\] [jobs] format \[$symbol$number\] [julia] format \[$symbol($version)\] [kotlin] format \[$symbol($version)\] [kubernetes] format \[$symbol$context( \($namespace\))\] [localip] format \[$localipv4\] [lua] format \[$symbol($version)\] [maven] format \[$symbol($version)\] [memory_usage] format \$symbol[$ram( | $swap)\] [meson] format \[$symbol$project\] [mise] format \[$symbol$health\] [mojo] format \[$symbol($version)\] [nats] format \[$symbol$name\] [netns] format \[[$symbol \[$name\]]($style)\] [nim] format \[$symbol($version)\] [nix_shell] format \[$symbol$state( \($name\))\] [nodejs] format \[$symbol($version)\] [ocaml] format \[$symbol($version)(\($switch_indicator$switch_name\))\] [odin] format \[$symbol($version )\] [opa] format \[$symbol($version)\] [openstack] format \[$symbol$cloud(\($project\))\] [os] format \[$symbol\] [package] format \[$symbol$version\] [perl] format \[$symbol($version)\] [php] format \[$symbol($version)\] [pijul_channel] format \[$symbol$channel\] [pixi] format \[$symbol$version( $environment)\] [pulumi] format \[$symbol$stack\] [purescript] format \[$symbol($version)\] [python] format \[${symbol}${pyenv_prefix}(${version})(\($virtualenv\))\] [quarto] format \[$symbol($version)\] [raku] format \[$symbol($version-$vm_version)\] [red] format \[$symbol($version)\] [rlang] format \[$symbol($version)\] [ruby] format \[$symbol($version)\] [rust] format \[$symbol($version)\] [scala] format \[$symbol($version)\] [shell] format \[$indicator\] [singularity] format \[[$symbol\[$env\]]($style)\] [solidity] format \[$symbol($version)\] [spack] format \[$symbol$environment\] [status] format \[$symbol$status\] [sudo] format \[as $symbol\] [swift] format \[$symbol($version)\] [terraform] format \[$symbol$workspace\] [time] format \[$time\] [typst] format \[$symbol($version)\] [username] format \[$user\] [vagrant] format \[$symbol($version)\] [vcsh] format \vcsh [$symbol$repo\] [vlang] format \[$symbol($version)\] [xmake] format \[$symbol($version)\] [zig] format \[$symbol($version)\]按需改造保留预设风格并微调单个模块由于该预设是通过给每个模块显式设置format键生效的所以它是可局部覆盖的。如果你的需求只是大多数模块用方括号但某个模块想换个排版或符号可以在配置文件中新增一个同名模块节来覆盖预设中的对应format。例如把 Python 段的方括号改为自定义标签[python] format \ ${symbol}${pyenv_prefix}(${version})(\($virtualenv\))\ 要查看改动前后系统计算的完整配置可借助 src/main.rs 中定义的starship print-config子命令# 打印当前生效配置 starship print-config # 打印内置默认配置用于与预设改动的字段做对比 starship print-config --default回滚与注意事项覆盖前先备份预设通过-o ~/.config/starship.toml会把整个配置文件替换为该预设内容若此前已有大量自定义项建议先cp备份再决定是整体应用还是只摘取所需模块段合并进原配置。回滚方式把配置文件恢复为备份内容即可若想从零回到官方默认外观可删除配置文件中的相关format键或重新初始化配置。适用范围预设只调整内置模块的formatcustom、env_var等需要用户自定内容的模块以及directory、line_break、fill、character这类不使用 via/on 引导词的模块均不受影响。配置校验所有格式键均引用模块自身变量$symbol、$version等删除引导词并不会导致模块失效若手工编辑后拿不准语法可用starship print-config快速确认解析是否成功。综上Bracketed Segments 预设以极简的配置思路统一\[...\]模板实现了整条提示符排版的规则化既是一份可直接套用的配色/排版方案也是一份学习 Starship format 字符串转义、可选分组与$style用法的现成教材。【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考