
Starship Bracketed Segments 預設樣式將所有模組片段改為括號呈現的完整指南【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship本篇指南以 Starship 官方提供的 Bracketed Segments 預設樣式為核心說明它如何把內建模組的提示片段從預設的「via」「on」等文字改為整齊的括號包覆格式並透過starship preset指令一鍵套用。讀完本文你將掌握預設樣式的安裝方式、完整 TOML 設定內容、格式字串format string的底層語法以及如何在此基礎上自訂屬於自己的提示樣式。Bracketed Segments 預設樣式的執行截圖這個預設樣式在做什麼Starship 的內建模組module在預設情況下會以「via」「on」等連接文字來描述提示片段例如via main、on v3.11.0。Bracketed Segments 預設樣式做的事情很單純把每一個模組的顯示格式format全部改寫讓內容一律被[ ]括號包覆藉此獲得視覺上更整齊、更接近「區塊化」的提示畫面。以 預設樣式總覽 中的描述為準這個樣式「使所有模組使用括號片段內的格式顯示而非使用 Starship 預設via、on 等」。它不更動各模組的符號、顏色或顯示邏輯只統一調整片段的包覆方式因此非常適合作為自訂樣式的起點也方便與其他樣式如 Tokyo Night、Pastel Powerline搭配微調。安裝與套用使用 starship preset 指令官方提供一鍵套用的指令starship preset bracketed-segments -o ~/.config/starship.toml執行後Starship 會把 Bracketed Segments 的完整設定寫入~/.config/starship.toml若該檔案已存在且未加上-f會被視為衝突。寫入完成後重新載入 shell或執行exec $SHELL即可看到所有模組片段以括號呈現。除了寫入設定檔你也可以先將設定輸出到終端機檢視內容# 直接輸出到 stdout不寫入檔案 starship preset bracketed-segments # 列出所有可用的預設樣式名稱 starship preset --list指令選項的原始碼定義preset子指令的參數定義位於 src/main.rs由 clap 解析選項說明注意事項name要輸出的預設樣式名稱如bracketed-segments為枚舉值需為--list列出的名稱之一-o, --output PATH將預設樣式輸出到指定檔案取代預設的 stdout與--list互斥conflicts_with list-f, --force若輸出檔案已存在則強制覆寫必須搭配-o使用requires output-l, --list列出所有預設樣式名稱與--output互斥實際執行邏輯位於 src/print.rs 的preset_command當指定--list時印出樣式清單否則透過shadow::get_preset_content取得對應 TOML 內容再依是否指定-o決定寫入檔案使用原子寫入write_file_atomic或輸出到 stdout。相關行為有對應的單元測試src/print.rs例如驗證preset_command能正確輸出到檔案、以及--force能覆寫既有檔案。完整 TOML 設定內容本預設樣式的完整設定檔為 docs/public/presets/toml/bracketed-segments.toml內容如下$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)\]檔案開頭的$schema鍵指向 Starship 官方發布的 JSON Schemaconfig-schema.json用途是讓支援 JSON Schema 的編輯器在編輯此 TOML 時提供自動補全與即時驗證。其餘部分則是一長串[模組名稱]區段每個區段只覆寫該模組的format鍵沒有更動style、symbol等其他設定——這正是此預設樣式「輕量」的原因它只改變呈現包覆方式保留各模組原本的外觀與行為。深入解析格式字串語法要理解並改造 Bracketed Segments必須先掌握 Starship 的格式字串語法。官方完整的格式字串說明位於 docs/config/README.md以下整理與本預設樣式直接相關的三個核心概念。變數Variable格式字串中$後接變數名稱即為變數例如$version、$symbol、$branch。變數名稱只能包含字母、數字與底線。範例$version是名為version的變數$git_branch $git_commit是兩個以空格分隔的變數。Bracketed Segments 的每個format都大量使用$symbol與$version等變數例如[rust]區段的\[$symbol($version)\]就是「符號」與可選的「版本」組合。文字群組Text Group與樣式字串文字群組由兩部分組成第一部分是包在[ ]中的格式字串可包含文字、變數甚至巢狀群組第二部分是包在( )中的樣式字串用於設定第一部分的顯示樣式。例如on以紅色粗體印出on⌘ $version以綠色粗體印出⌘與版本內容a [b c](green)b為紅色a與c為綠色。樣式字串的常見寫法包括fg:green bg:blue綠字藍底、bold fg:27粗體 ANSI 色號 27、underline bg:#bf5700底線 自訂色等且最終呈現受終端模擬器支援度影響。關鍵在於括號字元[與]本身在格式字串中具有語法意義若要顯示真正的方括號必須以\[與\]跳脫。這就是 Bracketed Segments 設定中處處可見\[...\]的原因——外層的\[與\]是「要顯示的括號」內層的...才是文字群組語法。以[git_branch]為例[git_branch] format \[$symbol$branch\]解讀順序為顯示一個跳脫的左括號[接著是套用$style樣式的文字群組內容為$symbol與$branch最後顯示跳脫的右括號]。($style)保留各模組原本定義的樣式變數因此括號的顏色會與片段內容一致。條件式格式字串Conditional Format Strings包在( )中的格式字串是「條件式」的當其中所有變數皆為空值時整段不會渲染。例如($region)若region為空則不顯示否則顯示加上區域名稱(\[$a$b\] )僅當$a與$b皆為空時不顯示。Bracketed Segments 大量運用此機制讓括號內的次要資訊如版本、環境名稱在不存在時自動隱藏避免出現空括號。以 [python] 區段為例[python] format \[${symbol}${pyenv_prefix}(${version})(\($virtualenv\))\]其中(${version})與(\($virtualenv\))皆為條件式沒有版本就不顯示版本段沒有虛擬環境就不顯示(venv)段但外層的\[\]括號恆常顯示包裹至少存在的符號內容。重點模組格式拆解不同模組的format呈現出幾種典型模式理解後即可自行改寫模式範例說明符號 條件式版本[rust]、[nodejs]、[python]等語言模組\[$symbol($version)\]有版本才顯示版本符號 固定欄位[git_branch]、[aws]、[kubernetes]直接拼接$symbol與分支設定檔context 名稱條件式括號內再包括號[container]、[netns]、[singularity]內層使用\[$name\]顯示真正的名稱括號與外層區塊括號區隔複合指標[git_status]、[git_metrics]、[fossil_metrics]以\[$added\]\[-$deleted\]等把不同樣式$added_style、$deleted_style的片段各自括起特殊字元開頭[cmd_duration]⏱ $duration、[dotnet] $tfm在括號內保留時鐘、目標框架等標記符號例如[git_status]的([\[$all_status$ahead_behind\]]($style))外層再包一層條件式群組讓整段狀態在沒有內容時完全不顯示而[memory_usage]的\$symbol[$ram( | $swap)\]則把括號只套在記憶體數值上符號留在括號外。原始碼層面的實作佐證starship preset的完整運作鏈可以從原始碼驗證指令定義src/main.rs 中以 clap 定義Preset子指令name參數型別為print::Preset並標註value_enum因此--list所列的名稱即為合法輸入。名稱枚舉src/print.rs 中Preset結構實作ValueEnumvalue_variants呼叫shadow::get_preset_list()取得內建樣式清單。內容輸出src/print.rs 的preset_command依--list-o-f分支處理最終以原子寫入方式將 TOML 內容寫到目標路徑或 stdout。測試驗證src/print.rs 的單元測試涵蓋樣式清單非空、正確輸入不 panic、輸出至檔案以及--force覆寫既有檔案等行為並以include_str!(../docs/public/presets/toml/nerd-font-symbols.toml)比對寫入內容證明 CLI 輸出的設定檔即倉庫內文件。換句話說docs/public/presets/toml/bracketed-segments.toml 不僅是文件也是starship preset指令實際派發的內容來源兩者保持同步。在此基礎上自訂與微調套用預設樣式後~/.config/starship.toml即包含上述所有format覆寫。你可以直接編輯該檔案進行微調常見做法包括調整特定模組只改某個[模組名]區段的format例如把[git_branch]的括號改成全形「【 】」、或拿掉括號改回預設樣式搭配其他樣式先套用 Tokyo Night 或 Catppuccin Powerline 這類色彩樣式再手動合併 Bracketed Segments 的format區段即可同時擁有配色與括號區塊新增模組本樣式未覆寫的模組如 fill 這類特殊模組仍維持預設行為可自行補上format還原預設刪除~/.config/starship.toml中對應的[模組名]區段或直接移除整個設定檔即回到 Starship 出廠樣式。若想了解其他官方預設樣式與套用方式可參閱 預設樣式總覽格式字串、樣式字串與條件式語法的完整規範則可查閱 設定文件中的 Format Strings 章節。安裝 Starship 本體的方式可參考 安裝指南。【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考