Starship Jetpack 预设全解析:把整条工具链收进右侧的「伪极简」提示符方案

Starship Jetpack 预设全解析:把整条工具链收进右侧的「伪极简」提示符方案 Starship Jetpack 预设全解析把整条工具链收进右侧的「伪极简」提示符方案【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship导读Jetpack 是 Starship 官方预设Preset集合中一个被作者称为「伪极简」pseudo minimalist的方案其灵感来自 geometry-zsh 与 spaceship-prompt 两个社区提示符作品。它只在主提示行保留环境、状态与输入符等少量信息把目录、Git 状态与几十种语言运行时全部移交到「右提示符」right prompt区域从而让命令行主体保持轻量。读完本文你将理解这套预设的双段布局原理、format/right_format的编排方式、逐模块的符号与样式定制细节并能直接用starship preset jetpack一条命令复现并二次定制它。一、预设定位来自 geometry / spaceship 的「伪极简」思路Jetpack 预设与 Nerd Font、Tokyo Night、Pure 等社区预设一样收录在官方 预设总览文档 中。与大多数预设「把所有模块堆在同一行」的做法不同Jetpack 的核心理念是不减少信息量而是重新分配信息的位置主提示行左侧只渲染nix_shell、container、Git 指标、命令耗时、用户名、输入符等「正在发生什么」的信息右提示区域右侧与输入同一行承载目录、版本控制、几十种语言运行时、云环境、内存、时间等「当前上下文」信息。因此作者称之为「伪极简」视觉上主行很干净但其背后并没有牺牲功能。需要注意的是Jetpack不内置任何主题背景与 Powerline 风格箭头它明确声明“Uses the terminals color theme”——即整体观感取决于你当前终端配色方案样式仅通过bold、italic、dimmed与少量命名前景色作用于字符本身。这意味着更换终端主题即可整体换肤无需修改 starship 配置。原始 配置 TOML 约 340 行本文后面会逐段讲解并附完整原文。二、使用前提右提示符支持与字体该预设能否完整呈现取决于两个外部条件1. Shell 必须支持右提示符right promptJetpack 的大量信息放在right_format中而 Starship 只有在 shell 侧具备右提示能力时才会渲染这一区域。据 高级配置文档 的说明right_format目前支持的 shell 包括elvishfishzshxonshcmdnushellbash需要额外安装ble.shv0.4 或更高版本框架另外当使用zshv5.0.5时shell 默认会在右提示末尾追加一个空格若与$fill模块配合可能出现对齐偏差官方建议在.zshrc中加入ZLE_RPROMPT_INDENT02. 推荐字体JetBrains MonoJetpack 大量使用◎、◫、△、⌂、⋈、▸等几何字符注意它并不依赖 Nerd Font 符号集预设文档推荐使用 JetBrains Mono 以获得最佳字形与对齐效果。字体只需在终端层面安装并选中即可与 starship 配置本身无关。三、安装与启用Jetpack 的官方 TOML 随 Starship 发行包内置可直接通过 CLI 一键写入配置starship preset jetpack -o ~/.config/starship.toml命令含义拆解starship preset jetpack从内置预设库中取出 jetpack 预设-o 文件将结果输出覆盖写入到指定文件。默认情况下 starship 从~/.config/starship.toml读取配置该路径可用环境变量STARSHIP_CONFIG改变详见 配置文档。执行后重启终端或在新终端中exec $SHELL即可看到效果。如果你不想整体覆盖已有配置可以先查看该预设的完整内容再挑选感兴趣的段落手工合并——原始文件位于 docs/public/presets/toml/jetpack.toml其头部还带有$schema https://starship.rs/config-schema.json声明仓库内对应的 JSON Schema 快照为 docs/public/config-schema.json可配合支持 Schema 的编辑器获得配置项补全与校验。四、双段布局原理formatright_format$fillJetpack 最值得学习的地方是它只用了三个顶层配置就完成了「左右分工」配置位于文件 src/config.rs 所对应的顶层format/right_format字段。4.1 主提示行formatformat ($nix_shell$container$fill$git_metrics\n)$cmd_duration\ $hostname\ $localip\ $shlvl\ $shell\ $env_var\ $jobs\ $sudo\ $username\ $character阅读这段编排需要理解 Starship 的两条渲染规则format字符串内模块按书写顺序从左到右依次渲染\n强制换行$fill模块实现于 src/modules/fill.rs本身不输出内容而是用空白把同一行中它前后的模块推向左右两端。因此 Jetpack 实际渲染成两行第一行左侧是nix_shell、container如处于 Nix shell / 容器内才显示$fill把git_metrics新增/删除行数推到最右端第二行真正的输入行依次是命令耗时cmd_duration→ 主机名 → 内网 IP仅 SSH→ shell 层级 → 当前 shell → Vim 环境变量 → 后台任务数 → sudo 标记 → 用户名 → 结尾的character输入符。同时顶层还设置了add_newline true continuation_prompt ▸▹ add_newline让每个提示符前插入空行实现于 src/configs/mod.rs 的默认格式之上continuation_prompt则定义多行命令续行PS2时的前缀符▸▹。4.2 右提示right_formatright_format $singularity\ $kubernetes\ $directory\ ... $status\ $os\ $battery\ $time右侧按序收纳了容器/虚拟化singularity、kubernetes、docker_context→目录→ 版本控制vcsh、fossil_branch、git_branch、git_commit、git_state、git_status、hg_branch、pijul_channel→ 包管理package→约 50 种语言运行时与构建工具C/C、Dart、Deno、Elixir、Go、Java、Julia、Kotlin、Lua、Node、Python、Ruby、Rust、Swift、Terraform、Zig 等→ 云平台与memory_usage→status→os→battery→time。根据 高级配置文档 的说明right_format支持与format完全相同的模块集合并且$all只会展开成「未被format与right_format显式引用」的模块——Jetpack 将绝大多数模块显式列在右侧正是为了精确控制「什么进右栏、什么留在主行」。一个值得注意的细节right_format中引用了$aws但文件底部同时存在[aws] disabled true即云平台模块在预设中实际被关闭。从源码结构看这正是该预设为「伪极简」做减法的一种手段——保留插槽、默认停用需要时去掉disabled即可启用。五、主行关键模块逐项拆解Jetpack 对主行出现的每个模块几乎都做了符号与样式重定义这些配置集中在 TOML 中部。5.1character输入符随状态「变身」[character] format $symbol success_symbol ◎ error_symbol ○ vimcmd_symbol ■ # not supported in zsh vimcmd_replace_one_symbol ◌ vimcmd_replace_symbol □ vimcmd_visual_symbol ▼该模块实现于 src/modules/character.rs上次命令成功时显示亮黄◎失败显示紫色○在启用 Vim 模式的 shell 中进入普通模式显示绿色■替换/可视模式切换为□/▼。注释中的# not supported in zsh说明部分 Vim 细分符号在 zsh 上不被支持沿用默认值。5.2 环境与身份sudo、username、env_var[sudo] format $symbol style bold italic bright-purple symbol ⋈┈ disabled falsesudo 模块默认是隐藏的src/configs/sudo.rs此处显式disabled false让它在缓存了 sudo 凭据时显示⋈┈。[username] style_user bright-yellow bold italic style_root purple bold italic format ⭘ $user disabled false show_always false普通用户为亮黄、root 切换为紫色show_always false沿用 Starship 的默认逻辑——非 SSH、非 root、非默认用户等情况下自动省略从而保持主行干净。[env_var.VIMSHELL] format $env_value style green italic这是env_var模块的一个实例化用法该通用模块由 src/modules/env_var.rs 实现当环境变量VIMSHELL存在时以绿色斜体打印其值用于标记当前处于 Vim 内嵌 shell。5.3directory目录的「短路径」策略[directory] home_symbol ⌂ truncation_length 2 truncation_symbol □ read_only ◈ use_os_path_sep true style italic blue format $path$read_only repo_root_style bold blue repo_root_format $before_root_path$repo_root$path$read_only △实现于 src/modules/directory.rs。要点home_symbol ⌂家目录显示为⌂truncation_length 2与truncation_symbol □ 路径过长时只保留末两级用□表示被截断use_os_path_sep true直接使用系统路径分隔符避免路径再被改写只读目录追加◈处于 Git 仓库内时仓库根目录加粗显示并追加亮蓝△这是 Jetpack 在目录上对 Git 上下文的高度可视化。5.4 计时、任务、网络、时间与电量[cmd_duration] format ◄ $duration 每条命令执行耗时超过阈值后Starship 默认 2s见 src/configs/cmd_duration.rs 的min_time语义显示◄ 耗时用于感知长命令。[jobs] format $symbol$number style white symbol ▶后台存在任务时以▶加数量提示实现位于 src/modules/jobs.rs。[localip] ssh_only true format ◯$localipv4 disabled false仅当处于 SSH 会话时显示内网 IPv4模块位于 src/modules/localip.rs避免在普通终端出现噪音信息。[time] disabled false format $time time_format %R utc_time_offset local style italic dimmed white时间模块src/modules/time.rs默认不启用这里显式打开%R表示 24 小时制HH:MM偏移取本机时区显示为暗白斜体是整个右侧的“收尾”信息。[battery] format $percentage $symbol full_symbol █ charging_symbol ↑ discharging_symbol ↓ unknown_symbol ░ empty_symbol ▃ [[battery.display]] threshold 20 style italic bold red [[battery.display]] threshold 60 style italic dimmed bright-purple [[battery.display]] threshold 70 style italic dimmed yellow电池模块src/configs/battery.rs通过三段[[battery.display]]设置分级着色≤20% 红色加粗提示告急、≤60% 紫、≤70% 黄满电用实心█充电/放电分别用绿↑与↓表达。5.5 Git 三件套git_branch、git_metrics、git_statusJetpack 对 Git 状态做了符号高度图标化的处理这也是「伪极简」最见功力的部分分别实现于 src/modules/git_branch.rs、src/modules/git_status.rsgit_metrics模块位于同目录[git_branch] format $branch(:$remote_branch) symbol △ style italic bright-blue truncation_symbol ⋯ truncation_length 11 ignore_branches [main, master] only_attached true当前分支以亮蓝△ 分支名呈现长度超过 11 字符时用⋯截断ignore_branches [main, master]在主干分支上连分支名都省略因为它不携带新信息only_attached true处于 detached HEAD 时不显示该模块交由git_status/git_commit表达。[git_metrics] format (▴$added)(▿$deleted) added_style italic dimmed green deleted_style italic dimmed red ignore_submodules true disabled falsegit_metrics默认关闭这里显式打开并放在第一行的最右端相对上游新增的行数以暗绿▴n、删除数以暗红▿n表示。[git_status] style bold italic bright-blue format (⎪$ahead_behind$staged$modified$untracked$renamed$deleted$conflicted$stashed⎥) conflicted ◪◦ ahead ▴│[${count}│](italic green) behind ▿│[${count}│](italic red) diverged ◇ ▴┤[${ahead_count}│▿┤${behind_count}│](italic bright-magenta) untracked ◌◦ stashed ◃◈ modified ●◦ staged ▪┤[$count│](italic bright-cyan) renamed ◎◦ deleted ✕整个工作区状态被压缩进一对⎪…⎥括号里●已修改、▪┤n│已暂存、◌未跟踪、✕已删除、◪冲突、◃◈stash以及相对上游的前进/后退/分叉计数。一眼即可判断仓库是否干净、差了多少提交。六、右栏的语言工具链统一“裸版本号 短标签”语法右提示栏后半段被数十种语言运行时占据。Jetpack 没有逐一定义它们的颜色多数继承各模块在 src/configs 中的默认样式而是做了两件统一的事标签缩写与version_format ${raw}。${raw}表示直接输出未经任何符号包裹的原始版本号例如v20.11.0不再加v前缀逻辑之外的额外符号。以几个典型模块为例模块实现均位于 src/modules[nodejs] format node ◫ ($version) version_format ${raw} detect_files [package-lock.json, yarn.lock] detect_folders [node_modules] detect_extensions []Node 显示为node ◫ (20.11.0)且收紧触发条件只在存在锁文件或node_modules时才出现避免在任意目录都弹出版本。其余运行时遵循同样的缩写模式模块标签符号说明denodeno∫版本绿色加粗lualua⨀亮黄bunbun◫与 node 同风格的括号版本pythonpy⌉⌊亮黄加粗符号即一对括号rubyrb◆红色rustrs⊃红色packagepkg◨用于非语言的项目版本swiftsw◁亮红其余模块如c/cpp用ℂ、golang用∩、java用∪、haskell用❯λ、julia用◎、nim用▴▲▴、dart用◁◅、memory_usage用▪▫▪等在 TOML 底部仅覆盖symbol与format颜色沿用各模块默认值。云端模块中aws被disabled true关闭gcloud、openstack、azure保留在右栏。环境类容器化信息也做了专门定制例如 Nix shellsrc/modules/nix_shell.rs[nix_shell] style bold italic dimmed blue symbol ✶ format $symbol nix⎪$state⎪ $name impure_msg ⌽ pure_msg ⌾ unknown_msg ◌用⌾/⌽/◌区分纯/非纯/未知三种 Nix shell 状态。七、把 Jetpack 变成你自己的预设理解编排规则后二次定制就非常直接常见的几类修改只需在 TOML 中追加或改动对应段落把某个运行时挪回主行从right_format中删除$python再在format第二行$character之前插入$python即可改时间制式time.time_format改为%r即 12 小时制或去掉utc_time_offset local显示 UTC调整目录保留层级增大directory.truncation_length可显示更多路径层级恢复 AWS 模块删除或注释[aws] disabled true切换输入符替换character.success_symbol/error_symbol中的颜色与符号。由于预设本质就是一份标准 TOML所有字段都受 配置文档 与 config-schema.json 约束修改后只需重新加载 shell 即可验证反复starship preset jetpack -o ~/.config/starship.toml也可以随时回到官方原始形态。八、附Jetpack 预设完整配置原文以下为 Jetpack 预设的完整 TOML与 官方 TOML 完全一致可直接整体保存为~/.config/starship.toml也可按上文拆解对照学习# version: 1.0.0 $schema https://starship.rs/config-schema.json add_newline true continuation_prompt ▸▹ format ($nix_shell$container$fill$git_metrics\n)$cmd_duration\ $hostname\ $localip\ $shlvl\ $shell\ $env_var\ $jobs\ $sudo\ $username\ $character right_format $singularity\ $kubernetes\ $directory\ $vcsh\ $fossil_branch\ $git_branch\ $git_commit\ $git_state\ $git_status\ $hg_branch\ $pijul_channel\ $docker_context\ $package\ $c\ $cpp\ $cmake\ $cobol\ $daml\ $dart\ $deno\ $dotnet\ $elixir\ $elm\ $erlang\ $fennel\ $fortran\ $golang\ $guix_shell\ $haskell\ $haxe\ $helm\ $java\ $julia\ $kotlin\ $gradle\ $lua\ $maven\ $nim\ $nodejs\ $bun\ $ocaml\ $opa\ $perl\ $php\ $pulumi\ $purescript\ $python\ $raku\ $rlang\ $red\ $ruby\ $rust\ $scala\ $solidity\ $swift\ $terraform\ $vlang\ $vagrant\ $xmake\ $zig\ $buf\ $conda\ $pixi\ $meson\ $spack\ $memory_usage\ $aws\ $gcloud\ $openstack\ $azure\ $crystal\ $custom\ $status\ $os\ $battery\ $time [fill] symbol [character] format $symbol success_symbol ◎ error_symbol ○ vimcmd_symbol ■ # not supported in zsh vimcmd_replace_one_symbol ◌ vimcmd_replace_symbol □ vimcmd_visual_symbol ▼ [env_var.VIMSHELL] format $env_value style green italic [sudo] format $symbol style bold italic bright-purple symbol ⋈┈ disabled false [username] style_user bright-yellow bold italic style_root purple bold italic format ⭘ $user disabled false show_always false [directory] home_symbol ⌂ truncation_length 2 truncation_symbol □ read_only ◈ use_os_path_sep true style italic blue format $path$read_only repo_root_style bold blue repo_root_format $before_root_path$repo_root$path$read_only △ [cmd_duration] format ◄ $duration [jobs] format $symbol$number style white symbol ▶ [localip] ssh_only true format ◯$localipv4 disabled false [time] disabled false format $time time_format %R utc_time_offset local style italic dimmed white [battery] format $percentage $symbol full_symbol █ charging_symbol ↑ discharging_symbol ↓ unknown_symbol ░ empty_symbol ▃ [[battery.display]] threshold 20 style italic bold red [[battery.display]] threshold 60 style italic dimmed bright-purple [[battery.display]] threshold 70 style italic dimmed yellow [git_branch] format $branch(:$remote_branch) symbol △ style italic bright-blue truncation_symbol ⋯ truncation_length 11 ignore_branches [main, master] only_attached true [git_metrics] format (▴$added)(▿$deleted) added_style italic dimmed green deleted_style italic dimmed red ignore_submodules true disabled false [git_status] style bold italic bright-blue format (⎪$ahead_behind$staged$modified$untracked$renamed$deleted$conflicted$stashed⎥) conflicted ◪◦ ahead ▴│[${count}│](italic green) behind ▿│[${count}│](italic red) diverged ◇ ▴┤[${ahead_count}│▿┤${behind_count}│](italic bright-magenta) untracked ◌◦ stashed ◃◈ modified ●◦ staged ▪┤[$count│](italic bright-cyan) renamed ◎◦ deleted ✕ [deno] format deno ∫ $version version_format ${raw} [lua] format lua ${symbol}${version} version_format ${raw} symbol ⨀ style bold bright-yellow [nodejs] format node ◫ ($version) version_format ${raw} detect_files [package-lock.json, yarn.lock] detect_folders [node_modules] detect_extensions [] [bun] format bun ◫ ($version) version_format ${raw} [python] format py ${symbol}${version} symbol ⌉⌊ version_format ${raw} style bold bright-yellow [ruby] format rb ${symbol}${version} symbol ◆ version_format ${raw} style bold red [rust] format rs $symbol$version symbol ⊃ version_format ${raw} style bold red [package] format pkg $symbol$version version_format ${raw} symbol ◨ style dimmed yellow italic bold [swift] format sw ${symbol}${version} symbol ◁ style bold bright-red version_format ${raw} [aws] disabled true format aws $symbol $profile $region style bold blue symbol ▲ [buf] symbol ■ format buf $symbol $version $buf_version [c] symbol ℂ format $symbol($version(-$name)) [cpp] symbol ℂ format $symbol($version(-$name)) [conda] symbol ◯ format conda $symbol$environment [pixi] symbol ■ format pixi $symbol$version ($environment ) [dart] symbol ◁◅ format dart $symbol($version ) [docker_context] symbol ◧ format docker $symbol$context [elixir] symbol △ format exs $symbol $version OTP $otp_version [elm] symbol ◩ format elm $symbol($version ) [golang] symbol ∩ format go $symbol($version ) [haskell] symbol ❯λ format hs $symbol($version ) [java] symbol ∪ format java ${symbol}(${version} ) [jj_bookmark] format $symbol$bookmark($remote)$diverged( \\($overflow_count others\\)) symbol △ style italic bright-blue truncation_symbol ⋯ truncation_length 11 ignore_names [main, master] [julia] symbol ◎ format jl $symbol($version ) [memory_usage] symbol ▪▫▪ format mem ${ram}( ${swap}) [nim] symbol ▴▲▴ format nim $symbol($version ) [nix_shell] style bold italic dimmed blue symbol ✶ format $symbol nix⎪$state⎪ $name impure_msg ⌽ pure_msg ⌾ unknown_msg ◌ [spack] symbol ◇ format spack $symbol$environment总而言之Jetpack 是理解 Starship「左右分工」与「伪极简」设计哲学的绝佳范本$fill\n控制主行布局right_format收纳全部工具链character/directory/Git 三件套用几何符号完成状态可视化而所有符号颜色都谦逊地交给终端主题决定。无论你直接使用它还是借鉴它的编排思路改造自己的配置都能以极低的视觉成本承载极高的信息密度。【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考