跳转至

Starship 跨 Shell 提示符

一句话概述:Starship 是一个快速、可定制的跨 Shell 提示符工具,用 Rust 编写。

核心知识点速查表

知识点说明
为什么要学 Starship见对应章节
核心概念见对应章节
安装配置见对应章节
快速上手见对应章节
进阶用法见对应章节
常见问题见对应章节
参考资源见对应章节

为什么要学 Starship

Starship 是一个快速、可定制的跨 Shell 提示符工具,用 Rust 编写。它能自动检测当前目录的开发环境(Git 状态、编程语言版本、云平台、容器等)并在提示符中优雅显示。无论你使用 Bash、Zsh、Fish、PowerShell 还是 Nushell,Starship 都能提供一致的美观体验,告别手动配置各种 PS1 的痛苦。


核心概念

概念白话解释用途
Module模块提示符中的一个信息段(如 Git、Python 版本)
Preset预设预定义的主题配置
Format格式模块的排列方式
Style样式颜色和文字样式
Condition条件模块何时显示

安装配置

安装

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

# macOS
brew install starship

# Cargo
cargo install starship

# Windows
winget install --id Starship.Starship

激活

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

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

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

# PowerShell ($PROFILE)
Invoke-Expression (&starship init powershell)

# Nushell
mkdir ~/.cache/starship
starship init nu | save -f ~/.cache/starship/init.nu
# 在 config.nu 中 source ~/.cache/starship/init.nu

配置文件

# ~/.config/starship.toml

# 基础设置
add_newline = true        # 提示符前空一行
command_timeout = 500     # 命令超时(毫秒)

# 提示符格式
format = """
$username\
$hostname\
$directory\
$git_branch\
$git_status\
$python\
$nodejs\
$rust\
$golang\
$docker_context\
$cmd_duration\
$line_break\
$character"""

快速上手

使用预设

# 查看所有预设
starship preset --list

# 应用预设
starship preset nerd-font-symbols -o ~/.config/starship.toml
starship preset tokyo-night -o ~/.config/starship.toml
starship preset pastel-powerline -o ~/.config/starship.toml

常用模块配置

# 目录
[directory]
truncation_length = 3
truncation_symbol = "…/"
home_symbol = "~"
style = "bold cyan"

# Git 分支
[git_branch]
symbol = " "
style = "bold purple"

# Git 状态
[git_status]
format = '([\[$all_status$ahead_behind\]]($style) )'
style = "bold red"
conflicted = "="
ahead = "⇡${count}"
behind = "⇣${count}"
modified = "!"
untracked = "?"
staged = "+"

# Python
[python]
symbol = " "
format = '[${symbol}${pyenv_prefix}(${version} )(\($virtualenv\) )]($style)'
style = "bold yellow"

# Node.js
[nodejs]
symbol = " "
style = "bold green"

# Rust
[rust]
symbol = " "
style = "bold red"

# Docker
[docker_context]
symbol = " "
style = "bold blue"

# 命令执行时间
[cmd_duration]
min_time = 2_000       # 超过2秒才显示
format = "took [$duration](bold yellow) "

# 提示符字符
[character]
success_symbol = "[❯](bold green)"
error_symbol = "[❯](bold red)"

进阶用法

右侧提示符

right_format = """$time$battery"""

[time]
disabled = false
format = '[$time]($style) '
time_format = "%H:%M"
style = "dimmed white"

[battery]
full_symbol = "🔋"
charging_symbol = "⚡"
discharging_symbol = "💀"

[[battery.display]]
threshold = 20
style = "bold red"

自定义模块

# 自定义命令输出
[custom.kube]
command = "kubectl config current-context 2>/dev/null"
when = "command -v kubectl"
symbol = "☸ "
style = "bold blue"
format = '[$symbol($output )]($style)'

[custom.ip]
command = "hostname -I | awk '{print $1}'"
when = true
style = "dimmed yellow"
format = '[$output]($style) '

条件显示

# 只在特定目录显示
[python]
detect_extensions = ["py"]
detect_files = ["requirements.txt", "pyproject.toml", "Pipfile"]
detect_folders = [".venv", "venv"]

# 只在 SSH 时显示主机名
[hostname]
ssh_only = true
format = "[$ssh_symbol$hostname]($style) "
style = "bold dimmed green"

多行提示符

format = """
[┌──](bold green) $username@$hostname $directory $git_branch$git_status
[│](bold green) $python$nodejs$rust$golang
[└─](bold green) $character"""

与 Nerd Font 配合

[aws]
symbol = "  "

[conda]
symbol = " "

[dart]
symbol = " "

[golang]
symbol = " "

[java]
symbol = " "

[lua]
symbol = " "

[nodejs]
symbol = " "

[python]
symbol = " "

[ruby]
symbol = " "

[rust]
symbol = " "

常见问题

Q: 图标显示为方块?

安装 Nerd Font 并在终端中设置使用。推荐:FiraCode Nerd Font、JetBrainsMono Nerd Font。

Q: 提示符加载慢?

  • 调低 command_timeout
  • 禁用不需要的模块:[module_name] disabled = true
  • 使用 starship timings 诊断慢模块

Q: 如何完全隐藏某个模块?

[package]
disabled = true

[line_break]
disabled = true

Q: 与 Oh My Zsh 主题冲突?

Starship 替代了 Oh My Zsh 的主题功能。只需在 .zshrc 中注释掉 ZSH_THEME 设置。


参考资源

  • 官网:https://starship.rs/
  • GitHub:https://github.com/starship/starship
  • 配置参考:https://starship.rs/config/
  • 预设:https://starship.rs/presets/
  • 模块列表:https://starship.rs/config/#prompt