Starship Jetpack 预设深度解析:一份“伪极简”双行提示符的完整配置实战
2026/9/8 17:33:54 网站建设 项目流程

Starship Jetpack 预设深度解析:一份“伪极简”双行提示符的完整配置实战

【免费下载链接】starship☄🌌️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship

Jetpack 是 Starship 官方预置预设之一,官方定位为 “pseudo minimalist”(伪极简):它不追求把一切塞进左提示符,而是把命令、目录、Git 状态与各种语言工具链的版本信息按「左侧执行上下文 + 右侧工作区状态」的布局拆到两个提示符里,参考了 geometry 与 spaceship 两个提示符项目的设计思路。读完本文,你将掌握 Jetpack 预设的安装方式、底层 TOML 结构、每个核心模块的作用,以及它是如何做到“不写死配色、完全跟随终端主题”的,并学会在此预设基础上做自己的裁剪定制。

参考文档:fr-FR 版 Jetpack 预设说明 与 英文原版,配置全文位于 docs/public/presets/toml/jetpack.toml。

Jetpack 是什么:伪极简的双区提示符

Jetpack 被 Starship 官方收录在 预设列表 中。它的核心设计是:

  • 主提示符(format)只保留“轻量”信息:环境(nix_shell、container、sudo)、上一条命令耗时、主机名/IP、当前 shell、任务数量、用户名,最后以 character 收尾。
  • 右侧提示符(right_format)承载“重量级”状态:Git/Hg/Pijul/Fossil 版本控制信息、当前目录、Docker 上下文、包管理器与几十种语言运行时版本。
  • 两条区域之间用一个fill模块撑开,让右侧状态始终右对齐,视觉上像一条被“推”到右侧的状态栏。

在 Starship 源码中,左右提示符是分别解析与渲染的:src/print.rs 中会依据渲染目标读取formatright_format两个字段构造格式化器(参见 src/configs/starship_root.rs 对这两个字段的定义)。也就是说,Jetpack 的“左简右繁”并非截图效果,而是 Starship 原生right_format机制的产物。

前置条件:右提示符支持与推荐字体

原文 docs/fr-FR/presets/jetpack.md 明确给出两点要求:

  1. shell 必须支持 right prompt。Starship 的右提示符依赖各 shell 自己的右侧区域机制,例如 zsh 的RPROMPT、fish 的fish_right_prompt、bash 的 ble.sh 提示符等。你可以在初始化脚本里直接看到这一调用方式,比如 zsh 脚本通过starship prompt --right --terminal-width="$COLUMNS" ...渲染右提示符(src/init/starship.zsh),fish 则有专门的fish_right_prompt函数(src/init/starship.fish)。更完整的启用说明见 右提示符高级配置。
  2. 推荐使用 JetBrains Mono 字体。Jetpack 大量使用了几何符号与特殊字形(▴▿等),尽管它并不强制要求 Nerd Font 字库,但为了让这些符号与方括号对齐得更整齐,官方推荐 JetBrains Mono。

另外值得注意:Jetpack没有引入任何自定义调色板(palette)。全文配色只使用bluepurplegreenredbright-yellowdimmed white这类语义颜色名,因此实际显示完全取决于你的终端配色主题——这正是“Jetpack uses the terminal's color theme”这句话的含义。更换终端主题(如从浅色切到深色或换个配色方案),Jetpack 会随之整体换色,无需改动配置。

上图是官方预设截图 docs/public/presets/img/jetpack.png(2880×1800):左侧为命令输入与执行结果,右侧始终显示当前目录、分支、版本控制状态与语言工具链版本,随cd切换目录实时刷新。

安装与启用:一条命令生成配置

启用 Jetpack 预设只需要一条命令:

starship preset jetpack -o ~/.config/starship.toml

这里starship preset是 Starship 内建子命令,其参数定义见 src/main.rs:jetpack是预设名,-o/--output指定写入目标文件,配合-f/--force可强制覆盖已存在的配置,另可用-l/--list列出全部可用预设。

实现上,预设列表与内容并不是硬编码在源码里的:仓库根目录的 build.rs 在编译期扫描docs/public/presets/toml/目录下所有*.toml,把每个文件名作为预设名注册、把文件内容内嵌进二进制;运行时再由 src/print.rs 的preset_command将其输出到 stdout 或指定文件。这意味:

  • jetpack.toml一旦更新,重新编译即可让内置预设同步刷新;
  • 你随时可以starship preset jetpack(不带-o)把完整配置打印到终端,先预览再决定是否落盘;
  • starship preset -l可查看当前二进制内置的全部预设名。

如果你不想执行命令、希望手动合并,也可以直接阅读 docs/public/presets/toml/jetpack.toml 的内容,把需要的片段复制进现有starship.toml。配置的完整可校验 JSON Schema 见 docs/public/config-schema.json。

说明:启用后请务必保持formatright_format两条配置同时存在,Jetpack 的布局依赖于两者协同。

布局骨架:format、fill 与 right_format

Jetpack 布局的顶层骨架是整个预设的灵魂,我们逐段拆解:

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\ ... $os\ $battery\ $time"""

要点逐条说明:

  • add_newline = true:每次提示符前先换一行,给命令留出呼吸空间,这也是大多数 Starship 主题的默认值(src/configs/starship_root.rs 的默认实现同样为 true)。
  • continuation_prompt:多行命令续行时的前缀▸▹(dimmed white)。
  • 第一行($nix_shell$container$fill$git_metrics\n)是 Jetpack 最特别的设计:
    • nix_shell/container若处于激活环境(nix shell、容器内)就会显示在最上方;
    • fill是一个“填充”模块,symbol 被设为单个空格([fill] symbol = ' '),其作用是把后续内容顶到该行最右侧;
    • git_metrics(提交增删统计)因此总被渲染在第一行的右端,而不挤占主区域;
    • 括号内的这些模块为“可选组”,全部未激活时整行(含换行)自动消失——docker_context等右侧模块在无上下文时不占位,正是依赖这种可选组语义。
  • 主行从左到右依次为cmd_duration(上一条命令耗时)→hostnamelocalipshlvlshellenv_varjobssudousernamecharacter。可以看到命令执行信息在左,环境与身份在右端收束,最后以character(输入符号)结束。
  • right_format中的反斜杠续行:多行书写的 TOML 字符串拼接后仍是单一 module 序列,渲染顺序严格按文本顺序:先是容器/虚拟化/云(singularity、kubernetes、docker_context),再是目录与版本控制(directory、git_branch、git_status…),最后是语言工具链(nodejs、python、rust…)与系统状态(os、battery、time)。

从源码看,$all之外的显式 module 序列就是 Starship 的“白名单渲染”模式(src/configs/starship_root.rs 中默认format"$all"):未被写进format/right_format的模块即使探测到上下文也不会输出。Jetpack 正是用这套机制精确控制了信息层级。

核心模块配置逐项拆解

character:状态感知的输入符号

[character] format = "$symbol " success_symbol = "◎" error_symbol = "○" vimcmd_symbol = "■" # not supported in zsh vimcmd_replace_one_symbol = "◌" vimcmd_replace_symbol = "□" vimcmd_visual_symbol = "▼"

character是每条命令执行结果的“指示灯”:成功显示亮黄色,上一条命令失败则变为紫色;在支持 vim 模式探测的 shell 中,进入 vim 命令模式时符号变为,替换/可视等细分模式也有独立符号(配置里注释说明vimcmd_replace_one_symbol等细分状态在 zsh 中不受支持)。jetpack 文档正文也要求 shell 具备 keymap 探测能力,方能体验这套符号切换。

sudo 与 username:环境身份的显式化

[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
  • Starship 默认不显示sudo模块(其默认disabled = true),Jetpack 显式重新开启,符号为⋈┈——当检测到凭据已缓存(sudo 最近成功执行过)时才出现;
  • username在 Jetpack 中默认不开启(Starship 默认行为是只在 SSH 会话或用户切换时显示,因此show_always = false),普通用户用亮黄粗斜体⭘ user前缀,root 用户则显示为紫色。

directory:以 OS 分隔符为主语的路径风格

[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 △'

几个关键选项决定了 Jetpack 目录的观感:

  • use_os_path_sep = true让路径截断时按操作系统的路径分隔符切分(而不是固定/);
  • truncation_length = 2表示截断后至多保留两级(配合truncation_symbol方框符号);
  • 家目录显示为,只读目录追加标记;
  • 当身处 git 仓库时启用repo_root_format,仓库根目录以粗体蓝显示,并在路径末尾附加(同 git_branch 符号呼应)。

cmd_duration 与 jobs:执行反馈

[cmd_duration] format = "◄ $duration " [jobs] format = "$symbol$number " style = "white" symbol = "▶"

上一条命令耗时超过阈值(Jetpack 未改动默认时长阈值,仅定制样式)时,在行首显示◄ 12ms形式的耗时;后台存在任务时以蓝色加数字提示数量。

localip / time:SSH 场景与时钟

[localip] ssh_only = true format = " ◯$localipv4" disabled = false [time] disabled = false format = " $time" time_format = "%R" utc_time_offset = "local" style = "italic dimmed white"
  • localip默认模块在 Starship 中是关闭的,Jetpack 开启它但限定ssh_only = true——只有通过 SSH 登录时才在左侧显示内网 IPv4 地址,避免本机也刷 IP;
  • time默认模块在 Starship 中是关闭的,Jetpack 同样显式开启:%R为 24 小时制HH:MMutc_time_offset = "local"表示始终按本地时区显示,并置于右提示符最末端。

battery:阈值分档着色的电量显示

[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"

battery.display列表自上而下匹配:低于 20% 红色加粗、20%–60% 之间紫色、60%–70% 之间黄色、高于 70% 使用模块默认样式,实现“电量越低越醒目”的分档告警。

Git 三件套:分支、指标与状态

[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 = "✕"

Git 状态是右侧提示符最核心的一块,Jetpack 的风格极有辨识度:

  • git_branchignore_branches排除了main/master——在主干分支上不再重复显示分支名;only_attached = true表示 detached HEAD 状态下不显示分支(此时 Git 状态信息会退回到 commit/状态符号来表达)。分支名超过 11 个字符以截断。
  • git_metrics:统计当前分支相对上游的提交增删行数,绿色▴N表示新增、红色▿N表示删除。该模块默认在 Starship 中关闭(disabled = true),Jetpack 显式启用并默认跳过 submodule。它的显示位置在第一行fill之后(屏幕最右端)。
  • git_status:把所有状态符号用⎪...⎥括成一体:加蓝色数字表示暂存文件数,表示已修改,表示未跟踪,表示已重命名,表示删除,表示冲突;与上游比较时/分别表达领先/落后及其计数,分叉则用菱形同时给出两个方向的计数。

如果同时使用 Jujutsu(jj)版本控制,预设还对jj_bookmark做了与 git_branch 对称的定制(同样忽略 main/master、同样 11 字符截断),见 TOML 中[jj_bookmark]一节。

语言工具链:统一为“短标签 + 版本”的三段式

Jetpack 对所有运行时版本模块做了高度统一的排版,例如:

[deno] format = " deno ∫ $version" version_format = "${raw}" [nodejs] format = " node ◫ ($version)" version_format = "${raw}" detect_files = ["package-lock.json", "yarn.lock"] detect_folders = ["node_modules"] detect_extensions = [] [python] format = " py ${symbol}${version}" symbol = "⌉⌊ " version_format = "${raw}" style = "bold bright-yellow" [rust] format = " rs $symbol$version" symbol = "⊃ " version_format = "${raw}" style = "bold red"

这一大批配置的共同点非常明显:

  • 工具名前缀统一斜体小写短名denonodepyrsrbgohsjlsw…),一眼可知当前目录用什么技术栈;
  • 版本号一律version_format = "${raw}",直接显示原始版本字符串,不做v前缀剥离或major.minor折叠等任何改写;
  • 每个语言还配了专属几何符号(deno 用、node/bun 用、python 用⌉⌊、rust 用、ruby 用、swift 用…);
  • nodejs 额外收紧了探测规则:只有存在package-lock.json/yarn.locknode_modules目录时才显示,避免在只放了一个.js脚本的目录里盲目刷版本。

TOML 后半部分还依次为 dart、elixir(含 OTP 版本)、elm、golang、haskell、java、julia、nim、swift、conda、pixi、spack 等模块统一了 symbol 与 format,并保持了同一种“语言 + 符号 + 版本”节奏;[package]模块则显示为pkg ◨ 0.1.0,用于在没有锁文件场景下补充包版本信息。AWS 模块在预设中被关闭(disabled = true),说明 Jetpack 刻意让云凭据信息保持低调。

验证与效果:切换到不同项目会看到什么

官方截图 docs/public/presets/img/jetpack.png 演示了三个典型场景,可以帮助你快速自检配置是否生效:

  1. 进入 git 仓库:右侧出现目录 △ 分支名 ⎪⎪▪⎪│1│...⎪⎥一类的组合,其中目录为斜体蓝、仓库根目录粗体蓝并带git_metrics的增删统计出现在第一行最右端。
  2. 进入带包管理的项目:随后出现pkg ◨ 0.1.0、语言运行时版本(如pyrs)等内容。
  3. 命令执行失败/成功:行首 character 在亮黄与紫色之间切换;vim 模式下符号变为

当以上状态都不存在时,相关模块整体消失,右提示符只剩目录与 time——这正是“伪极简”的含义:极简只在没有上下文时才显现,一旦进入真实工程,Jetpack 会立刻把该有的状态都递到你眼前。

在此基础上做定制

Jetpack 是官方预设,直接拿来即可用;如果希望改成自己的风格,建议从以下方向下手(修改的仍是同一个~/.config/starship.toml):

  • 换配色:Jetpack 依赖终端主题发色。想让亮色更柔或更强,可在 TOML 中新增[palette]并给各模块 style 字段显式换色;更省事的做法是换一套终端配色方案即可全局生效。
  • 增删右侧模块:在right_format的模块列表里增删条目即可控制“什么语言/工具值得显示”。例如把[aws] disabled改回false就能让 AWS profile 显示出来。
  • 调整版本显示:把某个语言模块的version_format = "${raw}"改成"v${major}"等即可只显示主版本号(version 格式化语法见 formatter/version.rs)。
  • 改变信息层级:若希望分支信息常驻左侧,可将$git_branchright_format移入format主序列。

需要说明的两点边界:本预设只保证在支持右侧提示符的 shell(如 zsh、fish 等,参见 src/init 目录下的各 shell 初始化脚本)中呈现完整效果;并且默认关闭$all全量渲染,新增的语言模块若要显示必须手动写进right_format。此外,本文描述基于当前仓库内嵌的 jetpack.toml(版本注释为 1.0.0)与对应源码,安装前建议先执行starship preset jetpack预览内置版本,再决定是否写入配置文件。

【免费下载链接】starship☄🌌️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询