
Starship Pure Preset 实战用一行命令复刻 Pure 风格的极简双行提示符【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starshipStarship 官方提供了多个社区维护的配置预设Preset其中 Pure Preset 用于在 Starship 中复刻 Pure 提示符的视觉与行为特征第一行显示目录与 Git 信息第二行只留一个简洁的命令符。本文基于 Starship 仓库中的预设文档 pure-preset.md 与配套配置文件 pure-preset.toml完整讲解该预设的安装命令、每一项 TOML 配置的作用并结合源码说明starship preset子命令的底层实现读完后你既能直接套用这套配置也能理解预设是如何在构建期被打包进二进制的。一、Pure Preset 是什么根据预设文档 docs/presets/presets READMEStarship 的 Presets 是“社区提交的配置预设集合”Pure Preset 的定位是模拟 Pure 提示符的外观与行为。它的设计取向与 Starship 默认提示符有明显差异双行布局第一行放上下文信息目录、Git 分支/状态、命令耗时第二行只放 Python 虚拟环境名和命令符号❯模仿 Pure 的极简双行结构去图标化Git 分支不使用图标和on前缀只显示分支名本身状态紧凑Git 状态信息用括号包裹并以青色显示未跟踪、已修改等符号被替换为零宽字符视觉上更干净。该预设与仓库中其他预设Nerd Font、Tokyo Night、Pastel Powerline 等一样通过starship preset命令分发文档入口见 docs/presets/README.md。二、快速启用一条命令写入配置官方文档给出的安装方式只有一条命令starship preset pure-preset -o ~/.config/starship.toml这条命令会把 Pure Preset 的完整 TOML 配置直接写入~/.config/starship.tomlLinux/macOS 下的默认配置路径。结合 CLI 定义 src/main.rspreset子命令支持以下参数参数说明name位置参数预设名称必须是内置预设之一value_enum校验非法名称会直接报错-o, --output PATH将预设写入文件而非输出到 stdout-f, --force输出文件已存在时强制覆盖该参数要求同时指定-o-l, --list列出所有可用预设名称与name互斥实操上有两点需要注意覆盖保护若~/.config/starship.toml已存在直接执行上面的命令会因“文件已存在”而失败源码中force默认为false需追加-f才会覆盖。如果只是想预览配置内容可以省略-o让预设打印到终端再手动保存到配置文件。等效的离线方式预设内容同时以静态文件形式存在于仓库的 docs/public/presets/toml/pure-preset.toml可以直接复制该文件内容作为自己的starship.toml适合不方便使用二进制命令的场景。三、完整配置逐项解读下面是 pure-preset.toml 的完整内容与预设文档内嵌的配置一致$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 []各部分的作用如下。3.1 顶层 format决定“双行”布局的根源顶层format是一个多行原始字符串其中的反斜杠\用于行续接使第一行内的各模块横向拼接、不换行$line_break变量则显式插入换行把$python与$character推到第二行第一行$username/$hostname/$directory/$git_branch/$git_state/$git_status/$cmd_duration第二行$python虚拟环境名$character命令符这正是 Pure 的标志性版式上下文信息在第一行命令输入行尽量短。Starship 会解析该 format 字符串并据此加载所需模块——从 src/print.rs 的load_formatter_and_modules可以看到format 中出现的变量会被提取为模块集合只有命中的模块才参与渲染因此这个预设实际上“关掉”了所有未被引用的模块如语言运行时版本、包管理器版本等。$schema字段指向 Starship 的配置 JSON Schema可为 TOML 提供编辑器补全与校验该 Schema 在仓库中对应 docs/public/config-schema.json。3.2 directory 与 character蓝色目录、彩色命令符[directory] style blue目录路径统一渲染为蓝色。[character]三个符号均不带加粗——成功❯为紫色、上一条命令失败❯为红色、Vim 命令模式❮为绿色。对照默认实现 src/configs/character.rsStarship 默认值是success_symbol ❯、error_symbol ❯、vimcmd_symbol ❮即默认提示符使用加粗绿色本预设去掉了 bold 并改用紫色这正是 Pure 的标志性配色。3.3 git_branch / git_state / git_status去图标化与零宽字符技巧[git_branch]format $branch配合style bright-black只渲染分支名本身不显示 Git 图标、不加on前缀视觉上接近纯文本。[git_state]在 rebase/merge/cherry-pick 等交互状态下显示格式为(rebase 4/20)形式整段包在括号内并使用bright-black弱化显示。[git_status]这是配置中最有意思的一段。format中*后跟随六个状态变量整体包在(* ...)里并套用 218 色橙红色而ahead_behind与stashed放在括号外。注意conflicted、untracked、modified、staged、renamed、deleted六项的取值是**零宽空格字符U200B**而非常规符号——从配置结构看这是一个常见技巧这些变量始终“有值”但渲染出来不可见从而让括号内只留下*与stashed的≡实现“有变更才提示、但不显示具体变更符号”的极简效果style cyan则让整段状态信息呈青色。3.4 cmd_duration、jj_bookmark 与 python[cmd_duration]命令耗时显示为黄色format $duration 末尾的空格用于与前面的 Git 状态分隔。[jj_bookmark]面向 JujutsujjVCS 仓库格式为bookmark有远端时追加remote有分叉时追加(N others)颜色与git_branch一致为bright-black保持同一套视觉语言。[python]只保留format $virtualenv 且显式设置detect_extensions []、detect_files []——从这两项取值为空数组可以确认预设禁用了按*.py扩展名和requirements.txt等文件触发 Python 模块的逻辑第二行只在存在虚拟环境时显示 venv 名与 Pure 仅在激活虚拟环境时显示环境名的行为一致。四、底层实现starship preset是如何工作的预设命令的实现集中在 src/print.rspub fn preset_command(name: OptionPreset, output: OptionPathBuf, force: bool, list: bool) { if list { println!({}, preset_list()); return; } let variant name.expect(name argument must be specified); let content shadow::get_preset_content(variant.0); if let Some(output) output { if let Err(e) crate::utils::write_file_atomic(output, content, force) { ... } } else if let Err(err) std::io::stdout().write_all(content.as_bytes()) { ... } }从中可以确认几个实现事实预设清单来自编译期Preset实现了 clap 的ValueEnum其value_variants()直接返回shadow::get_preset_list()。这里的shadow由shadow-rs构建期生成——Cargo.toml 声明了对docs/public/presets/toml/目录的读取build.rs 在构建时遍历该目录把每个.toml文件名作为预设名、内容作为预设文本嵌入产物src/lib.rs 的shadow!(shadow)宏完成声明。也就是说starship preset pure-preset输出的是打包进二进制的静态配置不依赖运行时网络这也解释了为何预设名是编译期固定的枚举值。写入是原子操作且有覆盖保护-o路径通过write_file_atomic(output, content, force)写入force为false时目标文件已存在会报错退出std::process::exit(1)不指定-o则原样输出到 stdout。有测试覆盖src/print.rs 中的preset_list_returns_one_or_more_items、preset_command_does_not_panic_on_correct_inputs、preset_command_output_to_file、preset_command_output_existing_file_force四个测试分别验证了列表非空、对全部预设名不 panic、输出到文件、以及已有文件时 force 覆盖等行为与上文 CLI 参数语义一致。五、与默认提示符的差异速查配置项Starship 默认Pure Preset效果差异character.success_symbol❯见 character.rs❯命令符由加粗绿变为紫色character.error_symbol❯❯去掉加粗git_branch.format图标 on $branch风格$branch只显示分支名无图标无前缀git_status各符号常规可见符号零宽空格stashed ≡除外状态提示更隐晦紧凑顶层format单行长串模块双行$line_break分割复刻 Pure 双行版式python.detect_extensions/detect_files默认非空列表空数组仅虚拟环境触发 Python 段需要说明的适用前提该预设的jj_bookmark段只在你使用 Jujutsu 仓库时才有意义$schema字段仅服务于编辑器校验不影响运行。六、落地与微调建议验证安装结果写入配置后新开的 shell 中可用starship explain查看当前正在显示的模块及对应信息用starship print config查看合并后的有效配置确认预设已生效。个性化改色若紫色命令符不合眼只改[character] success_symbol ❯即可其余结构无需变动bright-black、cyan、yellow、218 色等都可替换为 Starship 支持的任何 ANSI 256 色彩值或颜色名。渐进式启用也可以先用starship preset pure-preset不带-o查看内容挑选需要的段落合并进现有配置避免-f直接覆盖已有配置。参考资料仓库内预设文档中文/英文docs/presets/pure-preset.md、docs/vi-VN/presets/pure-preset.md预设配置源文件docs/public/presets/toml/pure-preset.toml预设索引docs/presets/README.md命令实现src/main.rs#L102-L116、src/print.rs#L518-L555构建期嵌入build.rs#L24-L25、Cargo.toml#L18character 模块默认值src/configs/character.rs#L22-L34【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考