$ terminals _

starship

跨 Shell 的极速提示符工具

🌐 官网 GitHub brew install starship

简介

Starship 是一款使用 Rust 编写的跨 Shell 提示符工具,以极快的速度和高度可定制性著称。它兼容 Bash、Zsh、Fish、PowerShell 等主流 Shell,无需复杂配置即可获得美观且信息丰富的命令行提示符。

Starship 能自动检测当前目录的项目环境,智能显示 Git 分支状态、编程语言版本、包管理器信息、云服务上下文等。它采用异步渲染机制,即使在信息密集的场景下也能保持毫秒级的响应速度,不会拖慢你的命令行体验。

安装

# macOS
brew install starship

# Linux (通用安装脚本)
curl -sS https://starship.rs/install.sh | sh

# Cargo
cargo install starship --locked

安装后需要在 Shell 配置文件中添加初始化命令:

# Zsh (~/.zshrc)
eval "$(starship init zsh)"

# Bash (~/.bashrc)
eval "$(starship init bash)"

# Fish (~/.config/fish/config.fish)
starship init fish | source

核心特性

  • 极速响应: Rust 编写,异步渲染,提示符刷新速度极快
  • 跨 Shell 支持: 兼容 Bash、Zsh、Fish、PowerShell、Nushell 等
  • 智能检测: 自动识别 Git 状态、语言版本、虚拟环境等上下文
  • 高度可定制: 通过 TOML 配置文件自定义每一个模块的显示样式
  • 预设主题: 内置多种预设配置,一键切换不同风格

使用示例

# 生成默认配置文件
starship config

# 使用预设主题
starship preset nerd-font-symbols -o ~/.config/starship.toml
starship preset tokyo-night -o ~/.config/starship.toml

# 查看当前提示符渲染耗时
starship timings

# 查看所有可用模块
starship module --list

# 自定义配置示例 (~/.config/starship.toml)
# [git_branch]
# format = "[$symbol$branch]($style) "
# symbol = " "
#
# [nodejs]
# format = "[$symbol($version)]($style) "
#
# [python]
# format = "[$symbol$pyenv_prefix($version)]($style) "

典型场景

场景一:跨 Shell 统一提示符风格

同时使用 zsh(日常)和 bash(脚本调试)时,starship 让两个 Shell 有完全一致的提示符:

# ~/.zshrc
eval "$(starship init zsh)"

# ~/.bashrc
eval "$(starship init bash)"

# ~/.config/fish/config.fish
starship init fish | source

# 现在 zsh、bash、fish 的提示符显示完全一致

场景二:智能显示项目上下文

进入不同项目目录时,starship 自动显示对应的语言版本和工具信息:

~/projects/backend  ❯        # 普通目录
~/projects/backend  ❯  v20.11.0  # Node.js 项目(有 package.json)
~/projects/ml-model ❯  3.11.7  # Python 项目(有 requirements.txt)
~/projects/service  ❯  1.75.0  # Rust 项目(有 Cargo.toml)
~/projects/app main ❯        # Git 仓库(显示分支名)
~/projects/app main ❯ +2 !3  # Git 有 2 个暂存、3 个未暂存改动

场景三:性能调优——关闭不需要的模块

当某些目录检测导致提示符变慢时,针对性关闭模块:

# ~/.config/starship.toml

# 关闭不使用的语言检测(加速提示符渲染)
[ruby]
disabled = true

[php]
disabled = true

[java]
disabled = true

# 查看当前提示符各模块耗时
# 在终端运行:
# starship timings