news 2026/9/8 22:32:06

Starship Pure Preset 详解:用一份 TOML 复刻 Pure 风格的两行极简提示符

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Starship Pure Preset 详解:用一份 TOML 复刻 Pure 风格的两行极简提示符

Starship Pure Preset 详解:用一份 TOML 复刻 Pure 风格的两行极简提示符

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

本文以 Starship 官方预设库中的 Pure Preset 为主体,完整讲解该预设的安装命令、逐段配置参数及其源码级默认值对照。Pure Preset 的目标是模拟 Pure 这款经典 zsh 提示符的外观与行为:提示符分为两行,首行只显示目录、git 分支与状态,次要信息(如虚拟环境、耗时)下沉到第二行,整体风格克制、留白充足。读完后你将掌握该预设的完整 TOML 配置、每个模块配置项的取值含义与默认值差异,并理解“零宽空格”这类实现技巧背后的设计意图。

预设的定位与安装方式

Pure Preset 是 Starship 预设集合(docs/presets/README.md)中的官方成员之一,位于文档 docs/id-ID/presets/pure-preset.md。它模拟的是 Pure 提示符——一种以“两行式布局 + 最少化信息密度”著称的提示符风格。

Starship 内置了preset子命令来分发预设。从 src/main.rs 的命令行定义可以看到,Preset子命令支持三种用法:

  • 按名称输出预设内容到标准输出(starship preset <name>);
  • 通过-o/--output参数直接写入文件;
  • 通过--list列出全部可用预设名。

对应的官方推荐安装命令是:

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

该命令会把预设内容直接写入 Starship 的配置文件(XDG 配置目录下的starship.toml),无需手工复制粘贴。预设的原始 TOML 文件同样以源码形式存放在仓库中,见 pure-preset.toml。

完整配置逐段解析

以下是 pure-preset.toml 的完整内容,下文将按模块逐一展开。其中git_status各分类符号使用了不可见的零宽空格(U+200B,UTF-8 编码为 E2 80 8B),在编辑器里看不到字符,但从字节层面可以确认其存在,这也是该预设最精巧的设计点,后文专门说明。

"$schema" = 'https://starship.rs/config-schema.json' format = """ $username\ $hostname\ $directory\ $git_branch\ $git_state\ $git_status\ $cmd_duration\ $line_break\ $python\ $character""" [directory] style = "blue" [character] success_symbol = "❯" error_symbol = "❯" vimcmd_symbol = "❮" [git_branch] format = "$branch" style = "bright-black" [git_status] format = "[(*$conflicted$untracked$modified$staged$renamed$deleted) ($ahead_behind$stashed)]($style)" style = "cyan" conflicted = "​" untracked = "​" modified = "​" staged = "​" renamed = "​" deleted = "​" stashed = "≡" [git_state] format = '\($state( $progress_current/$progress_total)\) ' style = "bright-black" [cmd_duration] format = "$duration " style = "yellow" [jj_bookmark] format = "$bookmark(@$remote)$diverged( \(+$overflow_count others\))" style = "bright-black" [python] format = "$virtualenv " style = "bright-black" detect_extensions = [] detect_files = []

顶层 format:两行布局的骨架

顶层format用 TOML 多行字符串把模块排成两行,行尾的\用于抑制换行,$line_break显式制造换行:

  • 第一行:$username $hostname $directory $git_branch $git_state $git_status $cmd_duration——工作身份、位置与 git 上下文;
  • 第二行:$python $character——运行时环境与命令执行符号(❯)。

这与 Starship 默认的单行、多模块堆叠风格完全不同,正是 Pure“主行只放最重要信息、次行承载补充信息”的布局思想。模块顺序即渲染顺序;任何一个模块当前不可用(如非 git 仓库、无虚拟环境)时自动消失,不会留下空白。

[directory]:目录改为纯蓝色

[directory] style = "blue"

默认配置中目录样式是cyan bold(见 src/configs/directory.rs 的Default实现),其余字段全部保持默认:truncation_length = 3truncate_to_repo = truehome_symbol = "~"等。预设仅把颜色改成不粗体的blue,让路径呈现为柔和的蓝色而非默认的青色加粗,降低视觉噪音。

[character]:与 Pure 一致的 ❯ 符号

[character] success_symbol = "❯" error_symbol = "❯" vimcmd_symbol = "❮"

对照 src/configs/character.rs 中的默认值:

配置项预设取值默认值差异
success_symbol去掉 bold,改为紫色
error_symbol去掉 bold
vimcmd_symbol去掉 bold

符号本身沿用默认的 ❯ / ❮,只是统一去掉了bold修饰,使整条提示符的字重更一致。注意 Starship 源码中vimcmd_symbol还带有一个历史别名#[serde(alias = "vicmd_symbol")](见 src/configs/character.rs),老配置里的旧键名仍可被正确解析。另外,vimcmd_visual_symbolvimcmd_replace_symbol等 vim 细分模式符号在本预设中未配置,沿用默认值。

[git_branch]:去掉 “on ⎇ ” 前缀

[git_branch] format = "$branch" style = "bright-black"

默认的分支模块格式是on $symbol$branch(:$remote_branch),样式为bold purple(见 src/configs/git_branch.rs)。预设做了两处减法:

  1. format只保留$branch,删掉了on字样、分支符号以及(:$remote_branch)远程分支后缀;
  2. style从紫色加粗改为bright-black(终端 ANSI 8 号色,即亮灰),得到 Pure 式“安静分支名”的效果。

其余如truncation_length(默认i64::MAX,即不截断长分支名)等字段保持默认。

[git_status]:零宽空格技巧与*/指示器

[git_status] format = "[(*$conflicted$untracked$modified$staged$renamed$deleted) ($ahead_behind$stashed)]($style)" style = "cyan" conflicted = "​" untracked = "​" modified = "​" staged = "​" renamed = "​" deleted = "​" stashed = "≡"

这是整个预设最核心的部分,它复刻了 Pure 的 git 状态指示方式:工作区有改动时显示一个*,有 stash 时显示,而不是逐类罗列??+~等符号。

其实现机制可以结合 Starship 的模块渲染规则理解:git_status的各个$conflicted$untracked等占位符只在对应文件列表非空时才会渲染其符号值。本预设把六个分类符号全部设为零宽空格(U+200B),因此:

  • 某个状态类别存在文件时,占位符会渲染,但输出一个不可见字符,肉眼看不到分类细节;
  • format中的*(...)括号结构只要有任何分类非空就会整体出现,于是视觉上等价于“有改动 → 显示*”;
  • stashed单独设为,stash 存在时显示在$ahead_behind之后;
  • 着色分两层:(*...)这组使用 256 色色号218(亮黄),外层括号与$stashed使用模块stylecyan

这样提示符里既不会出现 Pure 之外的冗余符号,又保留了ahead/behind进度与 stash 信息,行为上与 Pure 的 git 状态行一一对应。

[git_state]:rebase / cherry-pick 等交互状态

[git_state] format = '\($state( $progress_current/$progress_total)\) ' style = "bright-black"

git_state模块在仓库处于 rebase、merge、cherry-pick 等交互状态时显示状态名,并可用$progress_current/$progress_total展示进度(如 rebase 到第几步)。预设沿用默认的双层括号格式,只把样式改为bright-black,使其与分支名同色系、低调地嵌入第一行。

[cmd_duration]:去掉 “took” 前缀

[cmd_duration] format = "$duration " style = "yellow"

默认格式是took $duration,样式为yellow bold,且min_time默认为 2000 毫秒——即上条命令耗时不足 2 秒时整个模块不显示(见 src/configs/cmd_duration.rs)。预设保留了 2 秒阈值这一默认行为,仅把format简化为$duration,省掉took一词,得到 Pure 式的裸时长显示,例如5s

[jj_bookmark]:为 Jujutsu 版本库预留分支位

[jj_bookmark] format = "$bookmark(@$remote)$diverged( \(+$overflow_count others\))" style = "bright-black"

Starship 支持 Jujutsu(jj)版本控制系统的书签(bookmark)模块。该段配置让 jj 仓库在第一行显示类似 git 分支的书签名(带@$remote后缀,分叉时追加(+N others)),样式同样是bright-black,与 git 分支的视觉权重保持一致。不在 jj 仓库中时该模块自动不显示。

[python]:只显示虚拟环境名

[python] format = "$virtualenv " style = "bright-black" detect_extensions = [] detect_files = []

对照 src/configs/python.rs 的默认值,预设做了两处关键改动:

  1. format从默认的via ${symbol}${pyenv_prefix}(${version} )(\($virtualenv\) )简化为$virtualenv——不再显示 🐍 符号、via前缀与 Python 版本号,只保留虚拟环境名;
  2. detect_extensions = []detect_files = []清空了触发文件检测的列表(默认包含py/ipynb扩展名以及requirements.txtpyproject.toml等 7 类文件)。

第 2 点意味着:模块是否显示将主要依赖环境检测(默认detect_env_vars仍含VIRTUAL_ENV),而非“目录里有 Python 相关文件”这一启发式。这与 Pure 的行为一致——有虚拟环境就显示,没有就不显示,避免在纯 Python 目录里凭空出现版本号。

设计要点小结

Pure Preset 的“Pure 味”来自三个层面的克制,均可在上述配置中直接对应:

  • 布局克制:顶层format$line_break把信息切成两行,第一行只留位置与 git 上下文,第二行只留运行时与执行符号;
  • 符号克制git_branch去掉oncharacter去掉 bold,cmd_duration去掉tookpython只显示 venv 名;
  • 着色克制:分支、git 状态、git state、jj bookmark、venv 统一使用bright-black,仅目录(blue)、命令耗时(yellow)、git 状态括号(cyan / 256 色 218)保留少量强调色。

相关仓库文件

内容路径
预设文档docs/id-ID/presets/pure-preset.md
预设 TOML 源文件docs/public/presets/toml/pure-preset.toml
效果截图docs/public/presets/img/pure-preset.png
预设索引页docs/presets/README.md
character 模块默认值src/configs/character.rs
git_status 所在 git 模块配置src/configs/git_branch.rs
cmd_duration 默认阈值src/configs/cmd_duration.rs
python 模块默认检测项src/configs/python.rs
directory 模块默认值src/configs/directory.rs
preset子命令定义src/main.rs

如果你希望在此基础上微调,推荐做法是先用starship preset pure-preset -o ~/.config/starship.toml生成文件,再在此基础上编辑;由于配置项支持 JSON Schema 校验(文件首行的"$schema"字段),现代编辑器可以为starship.toml提供字段级补全与拼写检查。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 22:30:52

三相异步电机矢量控制变频调速系统设计与Simulink仿真实践

简介&#xff1a;面向电气工程与自动化专业学生、电机控制工程师&#xff0c;提供一套基于MATLAB/Simulink平台的三相异步电机矢量控制变频调速系统设计仿真资料。内容系统梳理矢量控制理论&#xff0c;包括三相异步电机等效模型、Clarke/Park坐标变换、转子磁场定向、电流内环…

作者头像 李华
网站建设 2026/9/8 22:30:24

Pot-desktop 安装教程:3 步跑通跨平台划词翻译与 OCR

Pot-desktop 安装教程&#xff1a;3 步跑通跨平台划词翻译与 OCR 【免费下载链接】pot-desktop &#x1f308;一个跨平台的划词翻译和OCR软件 | A cross-platform software for text translation and recognition. 项目地址: https://gitcode.com/GitHub_Trending/po/pot-des…

作者头像 李华
网站建设 2026/9/8 22:29:54

Linux IP白名单配置实战:从iptables到应用层防护

这篇事情要从一次不算愉快的排障说起。有台线上服务器被安全团队扫出异常&#xff0c;登录日志里一大半是来自各个地区IP的SSH爆破尝试&#xff0c;虽然密码够复杂没被攻破&#xff0c;但看着那几百条 Failed password 记录&#xff0c;心里属实不安稳。后来处理方案很简单&…

作者头像 李华
网站建设 2026/9/8 22:28:56

从验结果到验轨迹:DeepSeek Harness重构AI测试新范式

搞“AI测试”这一年多&#xff0c;最深的感受就是&#xff1a;很多团队的测试思维还停留在“验结果”的阶段——不管中间过程&#xff0c;只看最终输出。这在传统软件时代没问题&#xff0c;但在大模型应用&#xff08;尤其是带工具调用、多步推理的 Agent&#xff09;面前&…

作者头像 李华
网站建设 2026/9/8 22:27:57

zip报错排查全指南:EOCD、密码恢复与跨平台解压实战

简介&#xff1a;面向需要接入微信JSAPI支付的Java开发者&#xff0c;这份wechatpad.zip提供了可直接配置运行的Java版支付模块&#xff0c;解决公众号或网页内发起微信支付时的签名、统一下单、回调验签等核心流程&#xff0c;适合有SSM或Spring MVC基础的中级开发者参考。压缩…

作者头像 李华
网站建设 2026/9/8 22:27:21

PR-Agent实战:用AI自动化代码审查,重塑Code Review流程

维护过有点规模的开源项目&#xff0c;或者在几十人的研发团队里当过负责人&#xff0c;大概率都体验过这种循环&#xff1a;PR 一进来&#xff0c;你就要点开 diff 一行行扫代码&#xff0c;然后回复“请补个测试”“这个函数命名有问题”“配置文件为什么被动过”。这边还没还…

作者头像 李华