首页
/ Starship Jetpack 预置方案详解:基于右侧提示符的伪极简终端配置

Starship Jetpack 预置方案详解:基于右侧提示符的伪极简终端配置

2026-09-08 17:17:59作者:江焘钦

导读

本文系统讲解 Starship 社区预置配置 Jetpack Preset:这是一套"伪极简"(pseudo minimalist)风格的完整 prompt 方案,受 geometry 与 spaceship 两款经典 Zsh 主题启发,将语言版本、Git 状态等"重信息"全部迁移到右侧提示符,左侧只保留最小必要的机器上下文与一个符号,从而获得极简外观与完整信息量的平衡。读完本文你将掌握:Jetpack 预置的完整 TOML 结构、starship preset 的安装与底层执行机制、每个模块的样式与符号含义,以及如何在保留其风格的前提下按需二次定制。

Jetpack Preset 的设计理念与适用场景

Jetpack 是收录在 docs/presets/README.md 中的社区预置之一,其核心理念可概括为三点:

  • 伪极简而非真极简:它不是把模块删光,而是利用"右侧提示符"这一界面资源,把信息量转移到终端右缘,视觉上保持左侧干净;
  • 适配终端配色主题:预置中所有颜色均使用 Starship 的具名颜色bright-yellowblueitalic greenpurple 等),没有写死十六进制色值,因此整体观感会随你终端的 color scheme 而变(原文档明确提示 "Jetpack uses the terminal's color theme");
  • 面向能渲染右侧提示符的 shell 环境,并推荐 Jetbrains Mono 等具备丰富字形(含特殊符号)的等宽字体以获得最佳显示效果。

Jetpack 使用终端自身的配色主题,改变终端主题即可整体换肤,无需修改配置文件。

界面形态与字体前提

以下是 Jetpack 在文档中呈现的实际运行效果:

Jetpack Preset 运行截图:左侧仅剩 nix/container、用户名与字符符号,语言与 Git 信息排列在右侧提示符

图中可以看到典型的"双行 + 右提示符"布局:信息被组织到 right_format 渲染的右侧区域。使用前需要满足两个前置条件(对应 docs/presets/jetpack.md 原文的 Prerequisite 小节):

  1. shell 需支持右侧提示符,Starship 对右侧提示符的启用方式可参考 高级配置文档;若当前 shell 不支持 right prompt,Jetpack 的"右移重信息"设计将无法生效;
  2. 推荐安装 Jetbrains Mono(也可选择其他覆盖字形较全的字体),因为预置大量使用了 ◎ ○ ■ ▸ ◈ △ ⋯ 等非 ASCII 符号。

快速安装与验证

原文档给出的安装命令是一条命令完成覆盖写入:

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

-o(即 --output)会把预置内容写到指定路径而非打印到标准输出。若该文件已存在,写入时会报错,需要配合 --force 强制覆盖:

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

在应用前你可以先做三件事:

# 1. 查看当前所有可用预置名称
starship preset --list

# 2. 把预置内容打印到标准输出,快速预览再决定是否覆盖
starship preset jetpack

# 3. 确认当前生效配置(合并默认值后的完整视图)
starship print-config

这一子命令的实现位置在 main.rsPreset 命令接收可枚举的 name-o/--output 输出路径与 -f/--force 强制覆盖参数;实际执行逻辑位于 print.rspreset_command,它通过 shadow::get_preset_content(name) 取出构建期嵌入二进制的预置内容,再经 crate::utils::write_file_atomic 原子写入目标文件(force=true 时允许覆盖已存在文件)。也就是说,TOML 预置文件在编译时随 shadow-rs(见 Cargo.toml)打进二进制,离线也能随时还原配置。

如果你不希望覆盖现有配置,也可以直接从仓库获取预置原文,手动合并到自己想用的配置片段中:

顶层布局:双段 format 与两行提示符

Jetpack 的顶层配置(预置文件开头部分)决定了整体骨架:

# 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\
...(省略,见下文详解)\
$battery\
$time"""

要点解读:

  • add_newline = true:每条 prompt 前插入空行,制造"段落式"阅读节奏;
  • continuation_prompt:多行输入续行时显示为浅白色 ▸▹,随环境 dimmed/白色;
  • format(左侧主提示符)内部用 \n 拆成两行:第一行渲染 $nix_shell$container,中间以 [fill](配置为单个空格 symbol = ' ')把 $git_metrics 推到本行最右端,形成"左上轻量环境信息 + 右上 Git 增删统计";换行后第二行从左到右依次为命令耗时、主机名、本地 IP、shell 层级、shell 类型、环境变量、后台任务、sudo 状态、用户名,最后以 $character 收尾;
  • right_format:右侧提示符集中承载剩余的全部模块,按"虚拟化/基础设施 → 目录与版本控制 → 各语言运行时 → 云与工具 → 系统状态"的顺序组织。

命令耗时模块

[cmd_duration]
format = "◄ $duration "

只输出斜体白的 ◄ 耗时 片段,长度紧贴第二行行首,属于典型的极简信息提示。

左侧提示符核心模块逐项拆解

character:随成功/失败切换的几何符号

[character]
format = "$symbol "
success_symbol = "◎"
error_symbol = "○"
vimcmd_symbol = "■"
# not supported in zsh
vimcmd_replace_one_symbol = "◌"
vimcmd_replace_symbol = "□"
vimcmd_visual_symbol = "▼"
  • 命令执行成功显示亮黄色加粗斜体的 ,失败变为紫色斜体
  • 进入 Vim 命令模式显示绿色 ;替换、逐字符替换、可视模式分别使用
  • 注释明确说明 zsh 下部分 vim 替换符号不受支持,是预置作者针对多 shell 兼容性留下的实践说明。

username 与 sudo

[username]
style_user = "bright-yellow bold italic"
style_root = "purple bold italic"
format = "⭘ $user "
disabled = false
show_always = false

[sudo]
format = "$symbol"
style = "bold italic bright-purple"
symbol = "⋈┈"
disabled = false
  • 普通用户为亮黄色粗斜体 ⭘ 用户名,root 使用紫色粗斜体,show_always = false 保证非必要(如 ssh/root 场景)时不显示;
  • sudo 凭证缓存有效时显示亮紫色 ⋈┈ 小标记。

环境与机器上下文

[env_var.VIMSHELL]
format = "$env_value"
style = 'green italic'

左侧提示符还监听 VIMSHELL 环境变量,命中时以绿色斜体显示其值(便于提示你正处于 Vim 内嵌 shell)。

[localip]
ssh_only = true
format = " ◯$localipv4"
disabled = false

localip 默认关闭,此处显式开启,且 ssh_only = true:只有 SSH 会话才显示品红色 IPv4 地址,本地终端不打扰。

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

后台任务数超过阈值时,以蓝色斜体 + 白色数字呈现。

目录模块:仓库根与截断策略

[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 △'
  • 家目录缩略为 ;路径过长时按 truncation_length = 2 只保留最后两级并用 表示省略;
  • use_os_path_sep = true 保证截断按各平台真实路径分隔符进行;
  • 在 Git 仓库中,仓库根以加粗蓝色高亮,前面的上级路径弱化,并在行尾追加亮蓝色 标记,与 Git 分支模块的符号体系呼应(repo_root_format 使用 $before_root_path/$repo_root 等插槽拆分前后样式);
  • 只读目录会显示 前缀。

右侧提示符:Git / 版本控制信息模块

右侧的核心是把目录与 Git 全套状态放在一起,且 git_branch 采用了"只显示非主干分支"的策略:

[git_branch]
format = " $branch(:$remote_branch)"
symbol = "△"
style = "italic bright-blue"
truncation_symbol = "⋯"
truncation_length = 11
ignore_branches = ["main", "master"]
only_attached = true
  • ignore_branches = ["main", "master"]:在主干分支上不输出分支名,保持干净;
  • only_attached = true:HEAD 处于 detached 状态时不显示分支模块;
  • 长分支名超过 11 字符用 截断,同时 $remote_branch 显示与远端分支的对应关系。

git_metrics:不依赖 git status 的增删统计

[git_metrics]
format = '(▴$added)(▿$deleted)'
added_style = 'italic dimmed green'
deleted_style = 'italic dimmed red'
ignore_submodules = true
disabled = false

该模块统计自上次提交以来新增/删除行数:绿色 + 新增数、红色 + 删除数,均为斜体弱化;ignore_submodules = true 不计子模块,且该模块默认关闭、此处显式开启。它被放在第一行右侧(fill 之后),即使不做文件操作也能随时看到代码量变化。

git_status:细粒度文件状态矩阵

[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│(亮青)、已修改 ●◦(黄)、冲突 ◪◦(亮品红)、远端领先/落后分别用绿色/红色 ▴│n│ / ▿│n│,分叉则显示菱形合并计数。这套符号在视觉上自成体系,与分支 、目录根 的"几何图形"语言保持一致。

hg_branch / pijul_channel / jj_bookmark / docker_context

右提示符同样覆盖了其他版本控制工具:

  • 预置针对 Jujutsu 提供了独立的 jj_bookmark 配置(预置文件第 312-318 行),与 git_branch 风格统一( 符号、亮蓝斜体、 截断、忽略 main/master 并显示远端与分叉溢出计数);
  • Mercurial 分支 $hg_branch、Pijul 频道 $pijul_channelright_format 中直接占位(使用各自默认样式);
  • docker_context 使用 符号显示当前 Docker 上下文,适合在多个集群上下文间切换的场景。

右侧提示符:语言运行时与版本模块

Jetpack 对主流语言模块统一做了"短标签 + 纯版本号"的重写。通过 version_format = "${raw}" 关闭 Starship 默认的 v 前缀语义化版本格式,直接输出裸版本号,去掉 via/on 等连接词,是全篇信息瘦身的关键手法。

以几个典型模块为例:

[deno]
format = " deno ∫ $version"
version_format = "${raw}"

[lua]
format = " lua ${symbol}${version}"
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 = []
  • Node.js 在 nodejs 模块配置 中把探测范围精确收敛到 package-lock.json/yarn.lock/node_modules,且 detect_extensions = [] 表示不再仅凭 .js 后缀就触发——避免在任意含 JS 文件的目录都被"node 模块"打扰,属于对 Starship Node.js 模块默认探测规则 的行为收紧;
  • 其余语言模块按同构模式定制:Python py⌉⌊ 符号与亮黄加粗、Ruby rb 红色、Rust rs 红色、Swift sw、Bun 与 Node 同款绿色 、Package 模块用 + 弱化黄色标注当前包版本;
  • 还有一批"单符号零文字"式极简模块,直接在符号后挂版本或环境名,例如 C/C++ 、Elixir (含 OTP 版本)、Elm 、Go 、Haskell ❯λ、Java 、Julia 、Nim ▴▲▴、Dart ◁◅、Gradle/Maven 等由 Java 生态配置 系列承担;
  • 环境管理器类:Conda 、Pixi 、Spack 、Nix shell (区分纯/非纯/未知状态,见 nix_shell 模块)、Guix shell 亦有占位。

右侧提示符:云、系统与时间信息

[aws]
disabled = true
format = " aws $symbol $profile $region"
style = "bold blue"
symbol = "▲ "

[memory_usage]
symbol = "▪▫▪ "
format = " mem ${ram}( ${swap})"
  • 云模块(AWS/GCloud/OpenStack/Azure)统一放置在右提示符末段;其中 aws 在预置中 disabled = true,即默认不打扰,需要时删除该字段即可启用;
  • memory_usage▪▫▪ 符号显示 RAM(与可选的 swap);
  • battery 使用纯字符进度块 █ ▃ ░ 配合阈值分档着色(低于 20% 红、60% 亮紫、70% 黄),full_symbol = "█" 保证各段宽度稳定;
  • 时间模块在右侧末尾 %R(24 小时制 HH:MM),utc_time_offset = "local" 跟随本地时区,斜体弱化置灰。

深入理解:颜色全部来自终端主题

对比预置全文可以发现:没有任何一个 style 使用 #hex 颜色,所有颜色均为 bright-yellowbluepurplegreenredwhitemagentacyan 等 ANSI 具名色,再叠加 bold/italic/dimmed 样式。这正是原文 "Jetpack uses the terminal's color theme" 的源码级印证——Starship 会把具名颜色映射到你终端配色方案中对应的 16 色槽位。因此:

  • 切换亮色/暗色终端主题,Jetpack 自动"跟随换肤",无需改配置;
  • 这也意味着想要精确还原文档截图观感,需要你的终端主题本身有协调的 16 色调色板;若某个槽位颜色异常,应去调整终端主题而非预置文件。

按需定制:保留骨架,微调细节

Jetpack 文件结构清晰,建议按"三段式"定位修改:

  1. 想加/减模块:编辑顶层 formatright_format 中的 $模块名 占位,例如希望左侧也出现 Git 分支,把 $git_branchright_format 移到 format$username 之前;
  2. 想改符号/颜色:进入对应 [模块名] 表,替换 symbolstyle 字段,全部使用具名色即可继续跟随终端主题;
  3. 想调整间距:模块 format 中的前导空格/尾随空格直接控制模块间距,例如 " deno ..." 的起始空格即模块与前一模块的分隔。

修改后用 starship print-config 观察合并后的最终配置,再开新终端即可验证。若误改,随时可以用最初的 starship preset jetpack -o ~/.config/starship.toml --force 一键还原官方原版。

小结

Jetpack Preset 用一份约 340 行的 TOML 示范了 Starship 三件高级能力的组合用法:右侧提示符(right_format)做信息分流、fill 模块做行内右对齐、具名色体系做主题自适应。它既是开箱即用的伪极简主题,也是一份绝佳的"Starship 高级布局教学样本"——阅读 docs/presets/README.md 可对比其与 Tokyo Night、Gruvbox Rainbow、Pastel Powerline 等其他预置在 format 策略上的差异,或结合 config 参考文档 按需扩展。

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

项目优选

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