首页
/ Starship Bracketed Segments 预设详解:用方括号统一全部内置模块的分段样式

Starship Bracketed Segments 预设详解:用方括号统一全部内置模块的分段样式

2026-09-07 23:46:08作者:殷蕙予

Starship 的 Bracketed Segments(方括号分段) 预设会重写内置各模块的 format,把原本依靠文字连接词(如 "via"、"on")描述的提示分段统一改为 [ ... ] 方括号包裹的形式。本文以仓库中的西班牙语文档 docs/es-ES/presets/bracketed-segments.md 为主体,结合其引用的完整预设配置文件与源码,说明该预设的效果、安装方式、完整配置内容以及格式字符串语法背后的实现原理。读完本文,你可以通过一条命令应用该预设,也能理解并手动定制“方括号风”的任意模块样式。

Bracketed Segments 预设运行效果,各分段均以方括号包裹并配以彩色图标与版本号

Bracketed Segments 预设要解决什么问题

默认情况下,Starship 的部分模块会用自然语言连接词交代上下信息。例如 Python 模块默认写作 via 🐍 v3.10.0,命令耗时模块默认会出现 took 2s 之类的描述;分支、版本、状态等信息也各自独立呈现。

而 Bracketed Segments 预设(来源文档原文见 docs/es-ES/presets/bracketed-segments.md)的做法是:

改变所有内置模块的 format,让它们的分段用方括号展示,而不是使用 Starship 默认的文字表达("via"、"on" 等)。

从上方截图中可以看到效果:Git 分支显示为 [trunk]、软件包版本为 [📦 v1.1.0]、Rust 工具链为 [🦀 v1.58.1]、Node.js 为 [@ v17.6.0]、命令耗时为 [⏱ 3s],连用户名、目录切换前后的提示都由方括号统一包裹,视觉上更加规整、紧凑,便于快速扫描当前环境的关键状态。

该预设属于 Starship 官方 Presets 社区预设合集 中的一员,仓库内另有多语言版本的说明(如 docs/ar-SA/presets/bracketed-segments.mddocs/ja-JP/presets/bracketed-segments.md 等),本文对应的是 docs/es-ES/presets/bracketed-segments.md

如何安装与应用该预设

安装方式非常简单,Starship 内置了 preset 子命令,直接执行:

starship preset bracketed-segments -o ~/.config/starship.toml

各参数含义如下:

参数 作用
starship preset 内置子命令,用于输出预设内容
bracketed-segments 预设名称,对应本主题
-o <路径> 将预设内容原子化写入指定文件(即 --output

从源码看,preset 命令在 src/print.rs 中实现:当指定预设名后,函数从内嵌资源中取出预设 TOML 文本(get_preset_content),再通过 write_file_atomic 写入 -o 指定的输出文件;若不传 -o,则把内容直接打印到标准输出(stdout),方便你先行预览:

starship preset bracketed-segments        # 预览 TOML 内容
starship preset bracketed-segments -o ~/.config/starship.toml   # 直接应用

如果你不确定当前支持哪些预设,可以列出全部名称(src/print.rspreset_list 的实现,测试用例见 src/print.rs):

starship preset --list

由于 -o覆盖写,在应用预设前建议先备份现有配置,便于日后还原:

cp ~/.config/starship.toml ~/.config/starship.toml.bak

取消或还原该预设

预设写入的只是一份常规 TOML 配置。要还原默认风格,只需把备份的配置文件恢复回去,或删除配置中由该预设加入的 [module] format = '...' 段落即可。由于本预设没有引入全局变量或 format 顶层覆盖,仅逐模块改写 format,因此也可以手动逐段删除后重启 Shell。

完整预设配置解读

该预设的完整 TOML 源文件位于 docs/public/presets/toml/bracketed-segments.toml,文档页面通过内嵌方式直接展示,内容如下(共覆盖 120+ 个内置模块):

"$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)\]'

可以看到该预设统一遵循一个设计范式:用反斜杠转义的 \[\] 作为字面方括号,把“图标 + 关键变量 + 可选的括号条件组”封装成一个 textgroup(形如 内容),且样式变量沿用模块自带的 $style$added_style 等。这样既保留了各模块原有的配色语义,又保证了外观的统一。

几条典型模块样式拆解

  • [git_branch]\[$symbol$branch\]。默认 Git 分支模块会附带描述性前缀,这里直接输出 [🦀 trunk] 一类的紧凑分支段。
  • [python]\[${symbol}${pyenv_prefix}(${version})(\($virtualenv\))\]。它把 Python 模块默认的 via 措辞去掉,输出 [🐍 v3.10.0];同时用 (\($virtualenv\)) 这类嵌套写法,只有当虚拟环境存在时才会渲染出字面的 (venv)
  • [cmd_duration]\[⏱ $duration\]。将默认的 "took" 表述替换成 [⏱ 3s]
  • [status][sudo]:把错误码、提权状态同样放入方括号,例如截图中的红色 [root][as 🟡]

转义与语法的实现依据

方括号在 Starship 的格式字符串中不是普通字符:format 构成一个带样式的 textgroup,( ... ) 构成条件组(仅当组内变量全部为空时才隐藏)。因此预设中所有“看起来是字面量”的中括号都必须写成 \[ / \]。这条规则在 src/formatter/spec.pest 的语法定义中有据可查:

escaped_char = { "[" | "]" | "(" | ")" | "\\" | "$" }

\[\]\(\)\\\$ 均为合法转义字符;同时 textgroupconditionalvariable 等规则共同决定了格式化文本的解析顺序。这正是该预设能够把“带样式的分段”整齐嵌套进“字面中括号”里的原理所在。各模块的默认 format 与样式变量定义则分别位于 src/configs(配置声明)与 src/modules(渲染逻辑),如果你希望自行微调某个模块的方括号样式,修改对应 [模块名] 段落后重新打开终端即可生效。

注意事项与适用边界

  • 该预设仅覆盖其 TOML 中显式列出的内置模块;未列出的模块(如 characterdirectoryline_breakfill 等)保持你原有配置不变。
  • 应用前请确认 ~/.config/starship.toml 是否为你的实际配置文件路径——在 Windows 上通常为 %USERPROFILE%\.config\starship.toml;若已使用自定义路径,可将 -o 指向该文件。
  • $schema 字段用于编辑器补全与校验,可保留不动。
  • 如需在应用前查看全部差异,可先运行 starship preset bracketed-segments 将内容输出到终端,再手工合并进现有配置。

总而言之,Bracketed Segments 通过一份“纯 format 改写”的 TOML 预设,为希望拥有统一、紧凑、无连接词风格提示符的开发者提供了开箱即用的方案;理解了其中 \[ 转义与 textgroup 语法后,你完全可以基于这份配置进一步定制出自己的专属风格。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

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