Starship 跨 Shell Prompt 安装与集成完全指南:从二进制下载到提示符生效
Starship 是一个用 Rust 编写、面向任意 shell 的极简且高度可定制的命令行提示符(prompt),目标是"最小、极速、无限可定制"。本文以仓库印尼语文档首页 docs/id-ID/README.md 为主线,系统讲解安装前置条件、三种主流安装方式(官方脚本 / Homebrew / Winget)以及 Bash、Fish、Zsh、PowerShell 等十种 shell 的接入方法,并结合仓库中的安装脚本与 init 源码解释其底层工作方式。读完本文,你将能够在自己的机器上完成从"下载二进制"到"提示符在每个新终端中生效"的完整闭环。
一、Starship 是什么:三句话理解核心设计
文档首页开宗明义地给出 Starship 的定位:"Prompt yang minimal, super cepat, dan dapat disesuaikan tanpa batas untuk shell apa pun!"(为任何 shell 打造的极简、超快、无限可定制的提示符)。首页的 feature 三栏进一步点明了它的三大设计支柱:
- Kompatibilitas Yang Utama(兼容性优先):可在各类标准 shell 与主流操作系统上工作,"到哪里都能用"。Starship 支持十种 shell(bash、elvish、fish、ion、powershell、tcsh、zsh、nu、xonsh、cmd),这一点可从 src/init/mod.rs 中不支持 shell 的报错清单直接得到源码印证。
- Dibuat dengan Rust(用 Rust 构建):借助 Rust 的速度与安全性,让提示符既快又可靠。仓库根目录 Cargo.toml 以 Rust 工程形式承载了整个二进制实现。
- Dapat Dikustomisasi(可定制):每个细节都可按你的喜好调整——既可以做成极简单行,也可以做成信息丰富的功能型提示符。
它只在终端需要绘制提示符时展示「当时需要的信息」(Git 分支、目录、语言版本、命令耗时等),保持界面简洁而信息不缺位,这就是"minimal namun kaya informasi"(简约却信息十足)的含义。
二、安装前置条件:Nerd Font
文档在正式开始前只列出了一项硬性前置要求:
终端中需要安装并启用 Nerd Font 字体。
Starship 内置模块大量使用 Nerd Font 字形(如各语言的 logo 图标、Git 分支符号等),缺少该字体会导致图标显示为方框或乱码。仓库根目录还内置了可直接加载的字体文件 public/nerd-font.woff2,同时 docs/presets/nerd-font.md 对相关字形/图标预设做了专门说明。若你不需要任何图标字形,可参考预设文档 docs/presets/no-nerd-font.md 与 docs/presets/no-empty-icons.md。
三、第一步:把 starship 二进制装到机器上
安装分两步走:先把 starship 二进制放入系统,再让 shell 启动时加载它。文档提供了三种二进制获取方式。
3.1 官方脚本安装(推荐,支持后续升级)
在 Shell 中执行:
curl -sS https://starship.rs/install.sh | sh
该命令从 starship.rs 拉取官方安装脚本并立即执行。文档特别强调:
更新 Starship:再次运行上面这行脚本即可。它会原地更新已安装版本,不会改动你的 Starship 配置(配置独立存放,见第四节)。
仓库 install/install.sh 就是该脚本的同源实现(官网托管的是发布版副本),脚本注释与默认值解释了它的行为细节:
- 支持目标平台与架构:脚本第 16–22 行声明了支持矩阵(
x86_64-unknown-linux-gnu、aarch64-unknown-linux-musl、x86_64-apple-darwin、x86_64-pc-windows-msvc等),并通过detect_platform()/detect_arch()(install/install.sh)用uname自动探测当前系统,Linux 下默认选用静态链接的 musl 构建以避免动态链接问题,Git Bash / Cygwin 等 Windows 环境则自动归入pc-windows-msvc。 - 默认安装目录:
/usr/local/bin(install/install.sh)。若该目录不可写,脚本会尝试通过sudo提权(Windows 下则提示以管理员身份运行)。 - 可用参数:脚本自述(
usage,install/install.sh)支持的常用选项包括:
| 参数 | 作用 | 默认值 |
|---|---|---|
-p, --platform <P> |
覆盖自动探测的平台 | 自动探测 |
-a, --arch <A> |
覆盖自动探测的架构 | 自动探测 |
-b, --bin-dir <DIR> |
指定二进制安装目录 | /usr/local/bin |
-v, --version <V> |
安装指定版本(形如 v1.2.3) |
latest |
-f, -y, --force, --yes |
跳过安装确认提示 | 需手动确认 |
-V, --verbose |
输出详细安装日志 | 关闭 |
- 下载通道:脚本优先使用
curl,其次wget,再次fetch;若 curl 是通过 snap 安装的会主动告警并另寻下载工具(install/install.sh)。
3.2 通过包管理器安装
文档给出了两个官方示例:
macOS 场景使用 Homebrew(Linux 下对应 Linuxbrew):
brew install starship
Windows 场景使用 Winget:
winget install starship
除此之外,仓库内还为其他平台维护了分发配置,可作为参考:Windows 的 Chocolatey 配方位于 install/windows/choco,MSI 打包源位于 install/windows/main.wxs;macOS 的 pkg 打包与公证脚本位于 install/macos_packages。社区整理的更多平台安装方式(Termux、Nix、Funtoo、Chocolatey 等)收录在安装进阶文档 docs/installing/README.md 中。
四、第二步:让 shell 加载 Starship——十种 shell 逐一接入
拿到二进制后,还需要把一段初始化语句加入各 shell 的启动配置文件,让每次打开终端时提示符都由 Starship 接管。以下配置代码均来自文档原文,可直接复制使用。
4.1 Bash
把下面两行追加到 ~/.bashrc 文件末尾:
# ~/.bashrc
eval "$(starship init bash)"
4.2 Fish
把下面两行追加到 ~/.config/fish/config.fish 文件末尾:
# ~/.config/fish/config.fish
starship init fish | source
4.3 Zsh
把下面两行追加到 ~/.zshrc 文件末尾:
# ~/.zshrc
eval "$(starship init zsh)"
4.4 PowerShell
将下面内容追加到 Microsoft.PowerShell_profile.ps1 文件末尾。可以用 PowerShell 中的 $PROFILE 变量查询该文件的位置,通常路径为 ~\Documents\PowerShell\Microsoft.PowerShell_profile.ps1,在 *-Nix 上则为 ~/.config/powershell/Microsoft.PowerShell_profile.ps1:
Invoke-Expression (&starship init powershell)
4.5 Ion
把下面两行追加到 ~/.config/ion/initrc 文件末尾:
# ~/.config/ion/initrc
eval $(starship init ion)
4.6 Elvish
注意:仅支持 elvish v0.18 及以上版本。
将以下内容追加到 ~/.config/elvish/rc.elv(Windows 上为 %AppData%\elvish\rc.elv):
# ~/.elvish/rc.elv
eval (starship init elvish)
对于 elvish v0.21.0 之前的版本,配置文件可能位于 ~/.elvish/rc.elv。
4.7 Tcsh
把下面两行追加到 ~/.tcshrc 文件末尾:
# ~/.tcshrc
eval `starship init tcsh`
4.8 Nushell
注意:目前仅支持 Nushell v0.96 及以上版本,且该接入方式未来可能发生变化。
在 Nushell 中运行 $nu.config-path 可找到配置文件位置。将以下命令粘贴到 Nushell 配置中执行,把生成的 starship.nu 写入自动加载目录:
mkdir ($nu.data-dir | path join "vendor/autoload")
starship init nu | save -f ($nu.data-dir | path join "vendor/autoload/starship.nu")
4.9 Xonsh
把下面两行追加到 ~/.xonshrc 文件末尾:
# ~/.xonshrc
execx($(starship init xonsh))
4.10 Cmd(Windows)
Cmd 本身不具备直接钩子的能力,需要搭配 Clink(v1.2.30+)使用。创建一个名为 starship.lua 的文件,放入 Clink 的脚本目录(默认路径如 %LocalAppData%\clink\):
-- starship.lua
load(io.popen('starship init cmd'):read("*a"))()
4.11 各 Shell 配置速查表
| Shell | 配置文件 | 需要写入的初始化命令 |
|---|---|---|
| Bash | ~/.bashrc |
eval "$(starship init bash)" |
| Fish | ~/.config/fish/config.fish |
starship init fish | source |
| Zsh | ~/.zshrc |
eval "$(starship init zsh)" |
| PowerShell | 由 $PROFILE 查询 |
Invoke-Expression (&starship init powershell) |
| Ion | ~/.config/ion/initrc |
eval $(starship init ion) |
| Elvish (v0.18+) | ~/.config/elvish/rc.elv |
eval (starship init elvish) |
| Tcsh | ~/.tcshrc |
eval `starship init tcsh` |
| Nushell (v0.96+) | 由 $nu.config-path 查询 |
写入 vendor/autoload/starship.nu |
| Xonsh | ~/.xonshrc |
execx($(starship init xonsh)) |
| Cmd | Clink 脚本目录下 starship.lua |
Lua 的 load(io.popen(...)) |
五、init 命令背后的两阶段设计
starship init <shell> 看似简单,内部其实是一个精心设计的两阶段(two-phase)初始化过程,见 src/init/mod.rs 的注释与实现:
- 第一阶段(stub):
starship init <shell>输出的是一小段"引导代码"(由init_stub打印,src/init/mod.rs),它负责定位 starship 二进制的完整路径,再调用真正的初始化脚本。 - 第二阶段(full init):stub 内部会请求
starship init <shell> --print-full-init(对应 CLI 定义见 src/main.rs,分发逻辑见 src/main.rs),init_main再将随二进制打包的完整初始化脚本输出给 shell 执行。例如 Bash 的 stub 实际展开为eval -- "$(starship init bash --print-full-init)"(src/init/mod.rs)。
之所以不直接在配置文件里写完整脚本,是为了规避两个现实问题(src/init/mod.rs 有完整历史背景):一是老版本 Bash(如 macOS 默认的 3.2)不支持进程替换式 source <(...),二是若把长脚本用 eval 一次性压成单行求值,脚本里的注释会"吞掉"后续所有内容。因此改为「stub 短小、主脚本完整」两段式,既兼容老版本,也便于维护与调试。
各 shell 的主初始化脚本以 include_str! 方式内嵌进二进制,对应的仓库源文件为 src/init/starship.bash、src/init/starship.zsh、src/init/starship.fish、src/init/starship.ps1、src/init/starship.ion、src/init/starship.elv、src/init/starship.tcsh、src/init/starship.nu、src/init/starship.xsh 与 src/init/starship.lua(Cmd),映射关系见 src/init/mod.rs。从源码可见不同 shell 的引导策略差异:Bash/Zsh 走 POSIX 路径转义 + eval,Fish 用 psub 进程替换,PowerShell 用 Out-String 防换行截断,Elvish 用 e: 前缀强制可执行路径解析等(src/init/mod.rs),各有针对性测试覆盖,例如对含空格、含单引号路径的转义测试(src/init/mod.rs)。
六、安装后的下一步
按上述步骤重启终端或重新 source 配置文件后,新的提示符即应生效。接下来可按需深入:
- 配置入门:修改
~/.config/starship.toml调整各模块;完整配置项说明见 docs/id-ID/config/README.md。 - 进阶调优:针对每个模块的深度定制可查阅 docs/id-ID/advanced-config/README.md。
- 预设模板:社区维护的现成配置(纯文本、Tokyo Night、Powerline 风格等)位于 docs/id-ID/presets/README.md。
- 疑难解答:常见问题见 docs/id-ID/faq/README.md;跨版本迁移见 docs/id-ID/migrating-to-0.45.0/README.md。
如果需要查阅完整安装流程的英文原文,可对照仓库根级指南 docs/guide/README.md(其印尼语版位于 docs/id-ID/guide/README.md)。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0629
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00