尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

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

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各分类符号使用了不可见的零宽空格U200BUTF-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 3、truncate_to_repo true、home_symbol ~等。预设仅把颜色改成不粗体的blue让路径呈现为柔和的蓝色而非默认的青色加粗降低视觉噪音。[character]与 Pure 一致的 ❯ 符号[character] success_symbol ❯ error_symbol ❯ vimcmd_symbol ❮对照 src/configs/character.rs 中的默认值配置项预设取值默认值差异success_symbol❯❯去掉 bold改为紫色error_symbol❯❯去掉 boldvimcmd_symbol❮❮去掉 bold符号本身沿用默认的 ❯ / ❮只是统一去掉了bold修饰使整条提示符的字重更一致。注意 Starship 源码中vimcmd_symbol还带有一个历史别名#[serde(alias vicmd_symbol)]见 src/configs/character.rs老配置里的旧键名仍可被正确解析。另外vimcmd_visual_symbol、vimcmd_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。预设做了两处减法format只保留$branch删掉了on字样、分支符号⎇以及(:$remote_branch)远程分支后缀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等占位符只在对应文件列表非空时才会渲染其符号值。本预设把六个分类符号全部设为零宽空格U200B因此某个状态类别存在文件时占位符会渲染但输出一个不可见字符肉眼看不到分类细节format中的*和(...)括号结构只要有任何分类非空就会整体出现于是视觉上等价于“有改动 → 显示*”stashed单独设为≡stash 存在时显示在$ahead_behind之后着色分两层(*...)这组使用 256 色色号218亮黄外层括号与$stashed使用模块style的cyan。这样提示符里既不会出现 Pure 之外的冗余符号又保留了ahead/behind进度与 stash 信息行为上与 Pure 的 git 状态行一一对应。[git_state]rebase / cherry-pick 等交互状态[git_state] format \($state( $progress_current/$progress_total)\) style bright-blackgit_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-blackStarship 支持 Jujutsujj版本控制系统的书签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 的默认值预设做了两处关键改动format从默认的via ${symbol}${pyenv_prefix}(${version} )(\($virtualenv\) )简化为$virtualenv——不再显示 符号、via前缀与 Python 版本号只保留虚拟环境名detect_extensions []与detect_files []清空了触发文件检测的列表默认包含py/ipynb扩展名以及requirements.txt、pyproject.toml等 7 类文件。第 2 点意味着模块是否显示将主要依赖环境检测默认detect_env_vars仍含VIRTUAL_ENV而非“目录里有 Python 相关文件”这一启发式。这与 Pure 的行为一致——有虚拟环境就显示没有就不显示避免在纯 Python 目录里凭空出现版本号。设计要点小结Pure Preset 的“Pure 味”来自三个层面的克制均可在上述配置中直接对应布局克制顶层format用$line_break把信息切成两行第一行只留位置与 git 上下文第二行只留运行时与执行符号符号克制git_branch去掉on与⎇character去掉 boldcmd_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.mdcharacter 模块默认值src/configs/character.rsgit_status 所在 git 模块配置src/configs/git_branch.rscmd_duration 默认阈值src/configs/cmd_duration.rspython 模块默认检测项src/configs/python.rsdirectory 模块默认值src/configs/directory.rspreset子命令定义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),仅供参考
返回列表