通过 Starship 个性化定制 PowerShell 终端
之前一直使用 Oh My Posh 美化终端提示符。不过 Oh My Posh 配置起来比较麻烦,就一直在使用官方提供的默认配置。然而在默认配置下, Oh My Posh 某些特性在 Windows 下体验不太友好。比如,在提示符中显示无意义的用户名;又或者当前路径过长导致输入命令换行。
最近试用了一款名叫 Starship 的类似的软件。也许是受到其官网宣传的蛊惑,感觉 Starship 的启动速度确实要比 Oh My Posh 快那么一些。此外, Starship 的配置也要比 Oh My Posh 简单一些。因此,决定抛弃 Oh My Posh ,改用 Starship 。
Starship 默认配置不显示用户名、会自动截断当前路径、命令输入提示符会另起一行,这些特性本来已经满足了我的需求,不过考虑到 Starship 的配置相对容易,所以还是可以折腾一下的。
安装
为了更好地体验 Starship 美化后的终端,推荐使用 Windows 终端。另外,为了显示图标,还需要安装一款 Nerd Font 字体。Starship 可以通过 WinGet 或 Chocolatey 等包管理器进行安装。这里统一使用 Scoop 进行安装:
powershellscoop bucket add nerd-fonts
scoop install starship windows-terminal UbuntuMono-NF
这里选择 Ubuntu Nerd Font 字体,也可以选择其他的 Nerd Font 。
安装完毕后,编辑 PowerShell 的 Profile 脚本:
powershellnotepad $PROFILE
在脚本中启动 Starship :
powershell# $env:STARSHIP_CONFIG = "~\.config\starship.toml"
Invoke-Expression (&starship init powershell)
Starship 的默认配置文件保存在 ~\.config\starship.toml
,可以在脚本中定义 STARSHIP_CONFIG
环境变量指定到其他路径。
最后,在 Windows 终端里设置默认字体为 Ubuntu Nerd Font :

配置
编辑 Starship 配置文件 ~\.config\starship.toml
,写入如下内容:
tomladd_newline = false
scan_timeout = 500
command_timeout = 5000
format = '$all$line_break$env_var$character'
[env_var.VIRTUAL_ENV]
format = 'venv:[$env_value]($style) '
style = 'yellow bold'
[time]
disabled = false
format = '🕙[$time]($style) '
[directory]
format = "[](243)[ $path]($style)[$read_only]($read_only_style)[](243) "
style = "bg:243"
read_only_style = "bg:243"
truncation_symbol = '…/'
[cmd_duration]
min_time = 100
format = '🐌[$duration](bold yellow) '
[aws]
symbol = " "
[buf]
symbol = " "
[c]
symbol = " "
[conda]
symbol = " "
[dart]
symbol = " "
[docker_context]
symbol = " "
[elixir]
symbol = " "
[elm]
symbol = " "
[fossil_branch]
symbol = " "
[git_branch]
symbol = " "
format = "[$symbol$branch(:$remote_branch)]($style) "
style = "bold yellow"
[git_status]
conflicted = '🏳'
ahead = '🏎💨'
behind = '😰'
diverged = '😵'
up_to_date = '✓'
untracked = '🤷'
stashed = '📦'
modified = '📝'
staged = '[++\($count\)](green)'
renamed = '👅'
deleted = '🗑'
[golang]
symbol = " "
[guix_shell]
symbol = " "
[haskell]
symbol = " "
[haxe]
symbol = " "
[hg_branch]
symbol = " "
[hostname]
ssh_symbol = " "
[java]
symbol = " "
[julia]
symbol = " "
[lua]
symbol = " "
[meson]
symbol = " "
[nim]
symbol = " "
[nix_shell]
symbol = " "
[nodejs]
symbol = " "
[package]
symbol = " "
[pijul_channel]
symbol = " "
[python]
symbol = " "
[erlang]
symbol = " "
[ruby]
symbol = " "
[rust]
symbol = " "
[scala]
symbol = " "
该配置文件的作用如下:
- 重新定义了各语言的图标
- 当命令执行耗时超过 100 ms 时,显示执行时长
- 显示当前时间
- 重新排列了提示符布局
- 显示完整的 Python 虚拟环境路径

最终效果