通过 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 :

windows-terminal

配置

编辑 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 = " "

该配置文件的作用如下:

最终效果

最终效果