ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Starship Pure Preset 详解:用 starship.toml 复刻 Pure 的双行极简提示符

Starship Pure Preset 详解:用 starship.toml 复刻 Pure 的双行极简提示符 Starship Pure Preset 详解用 starship.toml 复刻 Pure 的双行极简提示符【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship本文以 Starship 官方预设 Pure Preset 为主体完整讲解如何一条命令将其写入~/.config/starship.toml并逐段拆解该预设的完整 TOML 配置全局 format 顺序、directory、character、git_branch、git_status、git_state、cmd_duration、jj_bookmark、python 九个配置块背后的设计意图与显示行为最后结合starship preset子命令的源码实现说明预设内容是如何被内置进二进制的。读完后你可以独立应用该预设并能按自己的习惯调整其中的任意模块。Pure Preset 是什么Pure Preset 的目标是模拟知名 zsh 主题 Puresindresorhus/pure的外观与行为。Pure 最标志性的特征是两行式提示符第一行只展示上下文信息——用户名、主机名、当前目录、Git 分支与仓库状态、上一条命令的耗时第二行展示语言环境如 Python 虚拟环境和一个极简的提示符符号❯。与默认 Starship 提示符相比该预设刻意移除了 via、on 等连接词和大多数图标用颜色蓝色目录、灰色分支、青色 Git 状态、黄色耗时而非符号来区分信息层级整体更接近终端原生配色。应用预设一条命令生成 starship.tomlStarship 内置了官方预设分发机制应用 Pure Preset 只需执行starship preset pure-preset -o ~/.config/starship.toml该命令会直接把预设对应的完整 TOML 配置写入~/.config/starship.toml注意如果该文件已存在需要先备份或手动处理-o直接输出不会静默覆盖已有配置文件starship preset提供强制覆盖开关。从 src/main.rs 的 CLI 定义可以看到Preset子命令接收四个参数预设名name取值为内置预设之一、输出文件路径output即上面的-o、强制覆盖开关force以及列出全部预设名的开关list。实际处理逻辑位于 src/print.rs 的preset_command带list时调用preset_list()逐行打印所有可用预设名Pure Preset 对应的取值就是pure-preset指定了输出路径时通过write_file_atomic原子写入文件避免写入中断留下半截配置未指定输出路径时配置内容直接输出到 stdout方便管道处理例如starship preset pure-preset my.toml。预设名与内容的映射关系shadow::get_preset_list/get_preset_content是构建期从docs/public/presets/toml/目录生成的——测试代码中用include_str!(../docs/public/presets/toml/nerd-font-symbols.toml)与命令输出做逐字节比对见 src/print.rs 的preset_command_output_to_file等测试用例这保证了仓库里docs/public/presets/toml/下的 TOML 文件就是二进制内置的权威内容。Pure Preset 的完整配置以下内容为 pure-preset.toml 的完整配置即starship preset pure-preset输出的内容$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 []注原文档中的 TOML 通过占位符内嵌自该文件本文将其完整展开。第一行$schema指向 Starship 的配置模式文件 config-schema.json配合编辑器插件可以在编写starship.toml时获得自动补全与校验。配置逐段解读全局 format定义两行提示符的骨架顶部的format字段是全局格式串按顺序排列所有要渲染的模块。理解它是理解整个预设的关键第一行依次为$username、$hostname、$directory、$git_branch、$git_state、$git_status、$cmd_duration$line_break强制换行构成 Pure 标志性的第二行第二行依次为$python与$character。行尾的\是 TOML 多行字符串里的行续符保证各模块之间不会多出空白。各模块在没有可显示内容时例如不在 Git 仓库中会自动整体消失不会留下空位。[directory]蓝色目录去掉截断装饰[directory] style blue只设置蓝色样式。Starship 的 directory 模块默认还会用…截断长路径并显示文件夹图标预设没有覆盖truncation_length等选项因此目录段遵循默认截断行为仅用蓝色区分于普通文本——这也是 Pure 的视觉惯例目录通常是深色终端里唯一的亮色。[character]三个场景的提示符符号[character] success_symbol ❯ error_symbol ❯ vimcmd_symbol ❮上一条命令成功紫色❯上一条命令失败非零退出码红色❯让你一眼察觉命令出错处于 Vim 模态编辑时绿色❮提示当前是命令/插入模式切换状态。character 模块正是提示符最右侧、紧跟输入光标的那个符号颜色变化是 Pure 行为中最常用的反馈通道。[git_branch]仅分支名亮黑色弱化[git_branch] format $branch style bright-black默认的 git_branch 格式带有 Git 图标和 on 类文字预设把 format 精简为只显示分支名本身并用bright-black亮黑视觉上接近灰色弱化它让分支信息存在感低但不缺失符合 Pure 的极简审美。[git_status]零宽符号计数与 stash 标记[git_status] format [(*$conflicted$untracked$modified$staged$renamed$deleted) ($ahead_behind$stashed)]($style) style cyan conflicted ​ untracked ​ modified ​ staged ​ renamed ​ deleted ​ stashed ≡这是整个预设里最有技巧的一段。Starship 的 git_status 模块的行为是每种状态符号按对应文件数量重复渲染例如 3 个已修改文件就渲染 3 个*。预设把六种本地变更状态的符号全部设置为零宽空格零宽不可见字符效果是(*…)括号内无论多少文件变更视觉上只呈现(*)或()不占宽度但有没有*仍告诉你工作区是否干净括号外的($ahead_behind$stashed)显示与上游的领先/落后情况以及 stash 数量——stashed ≡会用≡符号按 stash 条数重复渲染1 个 stash 显示≡2 个显示≡≡。整段用青色style cyan括号内数字 218 的样式槽位按 Starship 颜色语法渲染显示。这等于用极窄的字符集复刻了 Pure 的*?M↓↑≡式状态摘要。[git_state]merge / rebase / cherry-pick 进度[git_state] format \($state( $progress_current/$progress_total)\) style bright-black当仓库处于git merge、git rebase、git cherry-pick等交互状态时git_state 模块会在分支名后显示当前状态与进度例如(rebase 2/5)。预设把它包在反斜杠转义的圆括号里并以亮黑色弱化保持第一行视觉层级统一。[cmd_duration]黄色显示慢命令耗时[cmd_duration] format $duration style yellow当上一条命令超过触发阈值默认为 2 秒见 cmd_duration 配置的min_time时第一行末尾会显示黄色耗时帮你识别哪些命令在变慢。[jj_bookmark]为 jj 版本控制预留的分支段[jj_bookmark] format $bookmark($remote)$diverged( \($overflow_count others\)) style bright-blackStarship 支持 jjJujutsu版本控制jj_bookmark 模块是 jj 工作区书签的对应物角色类似 git_branch显示书签名与远程映射发生分叉时显示超出数量。预设同样用亮黑色弱化保证 jj 用户与 Git 用户获得一致的视觉体验。[python]只显示虚拟环境名隐藏 Python 版本[python] format $virtualenv style bright-black detect_extensions [] detect_files []Pure 的第二行在激活 Python 虚拟环境时会显示环境名。这里预设做了三件事format 只保留[$virtualenv]去掉了默认的Py前缀和 Python 版本号把detect_extensions和detect_files都置空默认包含*.py、requirements.txt、pyproject.toml等触发文件从源码结构看python 模块在这些检测列表为空后不再因为目录里存在 Python 文件而激活从而让 python 段只在确实处于虚拟环境这一场景下出现——这正是 Pure 的行为平时第二行干净进 venv 才多出一个环境名。在预设基础上二次定制starship preset pure-preset -o ~/.config/starship.toml生成的是普通配置文件生成后即可像编辑任何 Starship 配置一样修改。几个常见的定制方向调整信息层级全局format的模块顺序即显示顺序把$python挪到第一行、或删掉$username/$hostname都很直接纯文本目录里各段以$模块名形式独立成行注释掉即隐藏改色各模块的style均接受 Starship 的颜色语法blue、bright-black 这类颜色名或文字的内联样式改成自己终端主题的配色只需替换颜色名恢复状态符号如果觉得 git_status 的零宽符号信息量不够把conflicted、untracked、modified等改回!、?、*等可见符号即可括号结构与 ahead/behind、stash 逻辑保持不变校验配置保存后新开一个 shell 或重载配置即可生效配合开头的$schema字段编辑器能在保存前发现字段名或类型错误。小结关注点Pure Preset 的做法对应配置块两行式布局全局format以$line_break分行顶层format极简目录蓝色 默认截断[directory]命令成败反馈紫/红❯、Vim 态❮[character]分支弱化显示只显示$branch亮黑色[git_branch]、[jj_bookmark]状态压缩零宽符号计数 ≡表示 stash青色[git_status]交互状态进度(rebase 2/5)式提示亮黑色[git_state]慢命令提醒黄色耗时[cmd_duration]环境最小化仅虚拟环境名空检测列表[python]核心文件索引预设文档入口 docs/presets/pure-preset.md本文对应的阿拉伯语镜像页为 docs/ar-SA/presets/pure-preset.md、权威配置源 docs/public/presets/toml/pure-preset.toml、预设分发实现 src/print.rs 与 src/main.rs、配置模式 docs/public/config-schema.json。【免费下载链接】starship☄️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表