← Windows与WSL的终端美化

Windows与WSL的终端美化(四)——Shell与Prompt配置

前面几篇把窗口、字体、分屏和工作区都收拾得差不多了,可真到每天开始敲命令的时候,我还是很快意识到,终端最影响手感的那一层,其实是 shell 本身。窗口再漂亮,分屏再整齐,如果补全还像猜谜,提示符还像一块平板,整个终端就总差最后一口气。

所以这一篇,我想把 ShellPrompt 这两件事一次讲清楚。先把默认 shell 换成 Zsh,再交给 Oh My Zsh 管插件,最后用 Starship 接管提示符。这样配完以后,终端不只是看起来更统一,连补全、历史命令、目录跳转、Git 状态和语言版本提示,也都会顺手很多。

为什么换 Zsh

我后来换到 Zsh,不是因为默认 shell 不能用,而是因为它在高频交互这件事上,确实更照顾人。

最直接的差别有三件事:

  • 补全更聪明。命令、参数、路径补全更完整,配合插件以后几乎就是把“我大概想输什么”提前接住。
  • 历史命令更好用。很多高频命令不用从头敲,打一半,历史里就会把你常用的那条送上来。
  • 提示符更容易收拾。你既可以让它很简洁,也可以把 Git 分支、运行时版本、执行耗时这些信息放进去,还不至于显得乱。

如果只偶尔进 WSL 跑几条命令,默认 shell 当然够用。可一旦终端是你每天待得最久的地方,Zsh 这种一点点把摩擦磨平的提升,就会越来越明显。

安装 Zsh,先把默认 shell 切过来

这一部分很简单,先安装,再把登录 shell 改成 Zsh

sudo apt install -y zsh
chsh -s $(which zsh)

执行完以后,重开终端就会直接进入 Zsh。如果你不想马上重开,也可以先手动进一次:

zsh

chsh 只需要做一次。后面每次打开 WSL,默认就会是 Zsh

安装 Oh My Zsh

我自己没有打算把 Zsh 完全从零慢慢拼,所以直接用 Oh My Zsh 来接管插件管理和基础体验。它最大的好处不是花哨,而是省心。很多常用插件和初始化逻辑,都能很快整理起来。

安装命令如下:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

安装完成后,它会自动生成一份 ~/.zshrc。后面我们会在这份文件上继续改。

有一个细节先记住,等下把 Starship 接进来之后,Oh My Zsh 自己的主题要留空,不然两边会一起抢 prompt。

三个我会第一时间装上的插件

Oh My Zsh 的插件很多,但真正常驻下来、每天都在帮你的,其实往往就那几个。我这套配置里,最核心的是下面三个。

1. zsh-autosuggestions

它会根据你的历史命令做自动建议。很多高频命令,打一半就能看到灰色提示,按一下方向键就能补全。

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

2. zsh-syntax-highlighting

它会在你输入命令的时候直接做语法高亮。命令存在不存在,参数写得像不像回事,基本一眼就能看出来。

git clone https://github.com/zsh-users/zsh-syntax-highlighting ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

3. fzf-tab

这个插件会把原本比较朴素的 Tab 补全,换成更好筛选的交互形式。候选项多的时候,差别尤其明显。

git clone https://github.com/Aloxaf/fzf-tab ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/fzf-tab

这里顺手提醒一句,fzf-tab 想把体验发挥完整,系统里最好已经装了 fzf。如果你暂时还没装,也可以先把插件配好,后面再补工具链。

再加上 Oh My Zsh 自带的 gitsudo 插件,日常交互这一层其实就已经很够用了。目录跳转那部分,再用 zoxide 补上,整套手感会完整很多。

.zshrc 关键配置段

项目文档里给出的重点,是把 Oh My Zsh 的基础配置、插件列表、Starship 初始化和 zoxide 初始化放顺。结合我自己现在这篇博客的写法,我更建议你把 .zshrc 先整理成下面这样。

# Oh My Zsh
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME=""

# 顺手放进来的环境变量
export BAT_THEME="Catppuccin Mocha"
export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --border"

plugins=(
  git
  zsh-autosuggestions
  zsh-syntax-highlighting
  fzf-tab
  sudo
)

# 常用 alias
alias ls='eza --icons --color=always --group-directories-first'
alias ll='eza -la --icons --color=always --git'
alias lt='eza --tree --icons --color=always --level=3'
alias cat='bat'

source $ZSH/oh-my-zsh.sh

# Starship prompt
eval "$(starship init zsh)"

# zoxide
eval "$(zoxide init zsh)"

这里有几个点很关键:

  • ZSH_THEME="" 要留空,因为 prompt 交给 Starship 之后,不需要 Oh My Zsh 再套主题。
  • plugins 要先定义,再 source $ZSH/oh-my-zsh.sh
  • eval "$(starship init zsh)"eval "$(zoxide init zsh)" 放在文件后段,逻辑更清楚,排查问题也方便。
  • 上面那几条 alias 依赖 ezabat 这些工具。如果你还没装,先删掉对应 alias 也没关系,后面再补回来就行。

改完以后,执行一次:

source ~/.zshrc

或者直接重开终端。

zoxide 插件冲突问题,别两边都开

这一块很容易踩坑,也值得单独说一下。

项目文档里的示例把 zoxide 放进了 plugins 列表,同时又在后面写了:

eval "$(zoxide init zsh)"

这两种方式本质上都是在初始化 zoxide。如果你同时保留,等于重复加载,常见现象就是:

  • z 的行为不稳定
  • 补全表现偶尔不对
  • 排查时看起来像是插件顺序问题,其实是重复初始化

最稳的做法是二选一:

方案一,交给 Oh My Zsh 插件

如果你想让 Oh My Zsh 管它,那就把 zoxide 留在 plugins 里,同时删掉手动 init:

plugins=(
  git
  zsh-autosuggestions
  zsh-syntax-highlighting
  fzf-tab
  zoxide
  sudo
)

source $ZSH/oh-my-zsh.sh

方案二,手动初始化,我更推荐这个

zoxideplugins 里拿掉,只保留:

eval "$(zoxide init zsh)"

我现在就是这么配的。原因很简单,职责更清楚,也更不容易跟别的插件加载顺序搅在一起。

安装 Starship

Zsh 解决的是交互手感,Starship 解决的是 prompt 信息怎么排,怎么在好看和清楚之间拿平衡。

安装命令如下:

curl -sS https://starship.rs/install.sh | sh

装完以后,如果 ~/.config 目录还不存在,后面生成配置时也会一起处理,不用太担心。

套用 Starship 的 Catppuccin Powerline preset

我最后直接用的是 Catppuccin Powerline preset。它很适合这套系列,因为前面从窗口到工作区,本来就已经在往 Catppuccin Mocha 收口了。

命令只有一条:

starship preset catppuccin-powerline -o ~/.config/starship.toml

这个 preset 默认用的是 catppuccin_mocha。如果你喜欢别的口味,也可以把 palette 改成下面这些值之一:

  • catppuccin_mocha
  • catppuccin_frappe
  • catppuccin_macchiato
  • catppuccin_latte

它生成出来的 prompt,会把这些信息按层次排好:

  • 操作系统图标
  • 用户名
  • 当前目录
  • Git 分支和工作区状态
  • 常见语言版本,比如 Rust、Go、Node、PHP、Java、Kotlin、Haskell、Python
  • Conda 环境
  • 时间
  • 命令执行耗时

每个模块都有自己的背景色,中间用 Powerline 风格的分隔符接起来。信息很多,但不会挤成一团。

还有一个很实用的细节是,Starship 本身足够快,Git 状态检查会放到后台处理。所以哪怕 prompt 里带着分支、状态和语言版本,也不会把每次回车都拖得很闷。

如果你后面想试别的风格,项目文档里也提到了几个可直接套用的 preset:

  • tokyo-night
  • gruvbox-rainbow
  • nerd-font-symbols
  • pure-preset

切换方式也一样,重新生成一次 ~/.config/starship.toml 就行。

starship.toml 配置文件内容

如果你不想靠命令生成,或者你就是想先看清楚 Catppuccin Powerline 到底写了什么,可以直接把下面这份内容保存成 ~/.config/starship.toml。这就是 starship preset catppuccin-powerline -o ~/.config/starship.toml 生成出来的完整配置内容。

"$schema" = 'https://starship.rs/config-schema.json'

format = """
[](red)\
$os\
$username\
[](bg:peach fg:red)\
$directory\
[](bg:yellow fg:peach)\
$git_branch\
$git_status\
[](fg:yellow bg:green)\
$c\
$rust\
$golang\
$nodejs\
$php\
$java\
$kotlin\
$haskell\
$python\
[](fg:green bg:sapphire)\
$conda\
[](fg:sapphire bg:lavender)\
$time\
[ ](fg:lavender)\
$cmd_duration\
$line_break\
$character"""

palette = 'catppuccin_mocha'

[os]
disabled = false
style = "bg:red fg:crust"

[os.symbols]
Windows = ""
Ubuntu = "󰕈"
SUSE = ""
Raspbian = "󰐿"
Mint = "󰣭"
Macos = "󰀵"
Manjaro = ""
Linux = "󰌽"
Gentoo = "󰣨"
Fedora = "󰣛"
Alpine = ""
Amazon = ""
Android = ""
AOSC = ""
Arch = "󰣇"
Artix = "󰣇"
CentOS = ""
Debian = "󰣚"
Redhat = "󱄛"
RedHatEnterprise = "󱄛"

[username]
show_always = true
style_user = "bg:red fg:crust"
style_root = "bg:red fg:crust"
format = '[ $user]($style)'

[directory]
style = "bg:peach fg:crust"
format = "[ $path ]($style)"
truncation_length = 3
truncation_symbol = "…/"

[directory.substitutions]
"Documents" = "󰈙 "
"Downloads" = " "
"Music" = "󰝚 "
"Pictures" = " "
"Developer" = "󰲋 "

[git_branch]
symbol = ""
style = "bg:yellow"
format = '[[ $symbol $branch ](fg:crust bg:yellow)]($style)'

[git_status]
style = "bg:yellow"
format = '[[($all_status$ahead_behind )](fg:crust bg:yellow)]($style)'

[nodejs]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'

[c]
symbol = " "
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'

[rust]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'

[golang]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'

[php]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'

[java]
symbol = " "
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'

[kotlin]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'

[haskell]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version) ](fg:crust bg:green)]($style)'

[python]
symbol = ""
style = "bg:green"
format = '[[ $symbol( $version)(\(#$virtualenv\)) ](fg:crust bg:green)]($style)'

[docker_context]
symbol = ""
style = "bg:sapphire"
format = '[[ $symbol( $context) ](fg:crust bg:sapphire)]($style)'

[conda]
symbol = "  "
style = "fg:crust bg:sapphire"
format = '[$symbol$environment ]($style)'
ignore_base = false

[time]
disabled = false
time_format = "%R"
style = "bg:lavender"
format = '[[  $time ](fg:crust bg:lavender)]($style)'

[line_break]
disabled = true

[character]
disabled = false
success_symbol = '[❯](bold fg:green)'
error_symbol = '[❯](bold fg:red)'
vimcmd_symbol = '[❮](bold fg:green)'
vimcmd_replace_one_symbol = '[❮](bold fg:lavender)'
vimcmd_replace_symbol = '[❮](bold fg:lavender)'
vimcmd_visual_symbol = '[❮](bold fg:yellow)'

[cmd_duration]
show_milliseconds = true
format = " in $duration "
style = "bg:lavender"
disabled = false
show_notifications = true
min_time_to_notify = 45000

[palettes.catppuccin_mocha]
rosewater = "#f5e0dc"
flamingo = "#f2cdcd"
pink = "#f5c2e7"
mauve = "#cba6f7"
red = "#f38ba8"
maroon = "#eba0ac"
peach = "#fab387"
yellow = "#f9e2af"
green = "#a6e3a1"
teal = "#94e2d5"
sky = "#89dceb"
sapphire = "#74c7ec"
blue = "#89b4fa"
lavender = "#b4befe"
text = "#cdd6f4"
subtext1 = "#bac2de"
subtext0 = "#a6adc8"
overlay2 = "#9399b2"
overlay1 = "#7f849c"
overlay0 = "#6c7086"
surface2 = "#585b70"
surface1 = "#45475a"
surface0 = "#313244"
base = "#1e1e2e"
mantle = "#181825"
crust = "#11111b"

[palettes.catppuccin_frappe]
rosewater = "#f2d5cf"
flamingo = "#eebebe"
pink = "#f4b8e4"
mauve = "#ca9ee6"
red = "#e78284"
maroon = "#ea999c"
peach = "#ef9f76"
yellow = "#e5c890"
green = "#a6d189"
teal = "#81c8be"
sky = "#99d1db"
sapphire = "#85c1dc"
blue = "#8caaee"
lavender = "#babbf1"
text = "#c6d0f5"
subtext1 = "#b5bfe2"
subtext0 = "#a5adce"
overlay2 = "#949cbb"
overlay1 = "#838ba7"
overlay0 = "#737994"
surface2 = "#626880"
surface1 = "#51576d"
surface0 = "#414559"
base = "#303446"
mantle = "#292c3c"
crust = "#232634"

[palettes.catppuccin_latte]
rosewater = "#dc8a78"
flamingo = "#dd7878"
pink = "#ea76cb"
mauve = "#8839ef"
red = "#d20f39"
maroon = "#e64553"
peach = "#fe640b"
yellow = "#df8e1d"
green = "#40a02b"
teal = "#179299"
sky = "#04a5e5"
sapphire = "#209fb5"
blue = "#1e66f5"
lavender = "#7287fd"
text = "#4c4f69"
subtext1 = "#5c5f77"
subtext0 = "#6c6f85"
overlay2 = "#7c7f93"
overlay1 = "#8c8fa1"
overlay0 = "#9ca0b0"
surface2 = "#acb0be"
surface1 = "#bcc0cc"
surface0 = "#ccd0da"
base = "#eff1f5"
mantle = "#e6e9ef"
crust = "#dce0e8"

[palettes.catppuccin_macchiato]
rosewater = "#f4dbd6"
flamingo = "#f0c6c6"
pink = "#f5bde6"
mauve = "#c6a0f6"
red = "#ed8796"
maroon = "#ee99a0"
peach = "#f5a97f"
yellow = "#eed49f"
green = "#a6da95"
teal = "#8bd5ca"
sky = "#91d7e3"
sapphire = "#7dc4e4"
blue = "#8aadf4"
lavender = "#b7bdf8"
text = "#cad3f5"
subtext1 = "#b8c0e0"
subtext0 = "#a5adcb"
overlay2 = "#939ab7"
overlay1 = "#8087a2"
overlay0 = "#6e738d"
surface2 = "#5b6078"
surface1 = "#494d64"
surface0 = "#363a4f"
base = "#24273a"
mantle = "#1e2030"
crust = "#181926"

如何验证配置生效

配完之后,我一般会按下面这个顺序确认。

1. 确认默认 shell 已经切成 Zsh

echo $SHELL
echo $0
which zsh
zsh --version

正常情况下,$SHELL 会指向 zsh,当前 shell 也应该显示成 zsh

2. 确认 .zshrc 能正常加载

source ~/.zshrc

如果这里没有报错,说明基础配置至少能过第一关。

3. 确认 Starship 已经接管 prompt

which starship
starship --version

然后看提示符本身,你应该能看到分段式的 Powerline 样式,而不是 Oh My Zsh 默认主题。

4. 确认 zoxide 已经初始化成功

which zoxide
zoxide --version

再试一下跳目录。如果你已经有常去目录记录,输入 z 加目录关键字,应该就能直接跳过去。

5. 确认三个插件都真的在工作

  • zsh-autosuggestions,随便输入几个你常用命令的前缀,应该会出现灰色建议。
  • zsh-syntax-highlighting,输入一个不存在的命令,颜色应该会明显不一样。
  • fzf-tab,在目录较多的位置按 Tab,补全选择会比原生方式更好筛。

6. 进项目目录看 prompt 信息是否完整

进一个 Git 仓库,看看分支名和状态会不会显示。再进一个 Node 或 Python 项目,看看版本信息会不会跟着出来。如果这些都正常,说明 Starship 的主要模块已经接上了。

常见问题

Prompt 显示乱码或者方块

先确认终端已经启用了 Nerd FontCatppuccin Powerline 这类 preset 会大量使用图标和特殊分隔符,字体不对,显示基本就会出问题。

想切换 Starship 主题

重新运行 preset 命令就行:

starship preset <name> -o ~/.config/starship.toml

Oh My Zsh 感觉有点慢

先看 plugins 列表,删掉你根本不用的插件。Oh My Zsh 变慢,最常见的原因不是它本身,而是插件装得太随手。

这一篇配完以后,终端的“壳”和“脸”就都算收拾好了。你会明显感觉到,命令更好补全了,提示更及时了,目录跳转更省脑子了,Git 和语言环境信息也终于能在第一眼里看明白。下一篇,就可以继续把高频 CLI 工具也换成更顺手的版本。

系列文章导航

  1. Windows与WSL的终端美化(零)——系列概览
  2. Windows与WSL的终端美化(一)——WSL安装与配置
  3. Windows与WSL的终端美化(二)——WezTerm配置
  4. Windows与WSL的终端美化(三)——Zellij工作区管理
  5. Windows与WSL的终端美化(四)——Shell与Prompt配置(本篇)
  6. Windows与WSL的终端美化(五)——CLI工具链美化
  7. Windows与WSL的终端美化(六)——Catppuccin主题统一 $symbol $branch ](fg:crust bg:yellow)]($style)'

[git_status] style = "bg:yellow" format = '[($all_status$ahead_behind )](fg:crust bg:yellow)'

[nodejs] symbol = "" style = "bg:green" format = '[ $symbol( $version) ](fg:crust bg:green)'

[c] symbol = " " style = "bg:green" format = '[ $symbol( $version) ](fg:crust bg:green)'

[rust] symbol = "" style = "bg:green" format = '[ $symbol( $version) ](fg:crust bg:green)'

[golang] symbol = "" style = "bg:green" format = '[ $symbol( $version) ](fg:crust bg:green)'

[php] symbol = "" style = "bg:green" format = '[ $symbol( $version) ](fg:crust bg:green)'

[java] symbol = " " style = "bg:green" format = '[ $symbol( $version) ](fg:crust bg:green)'

[kotlin] symbol = "" style = "bg:green" format = '[ $symbol( $version) ](fg:crust bg:green)'

[haskell] symbol = "" style = "bg:green" format = '[ $symbol( $version) ](fg:crust bg:green)'

[python] symbol = "" style = "bg:green" format = '[ $symbol( $version)((#$virtualenv)) ](fg:crust bg:green)'

[docker_context] symbol = "" style = "bg:sapphire" format = '[ $symbol( $context) ](fg:crust bg:sapphire)'

[conda] symbol = "  " style = "fg:crust bg:sapphire" format = '$symbol$environment ' ignore_base = false

[time] disabled = false time_format = "%R" style = "bg:lavender" format = '[  $time ](fg:crust bg:lavender)'

[line_break] disabled = true

[character] disabled = false success_symbol = '[❯](bold fg:green)' error_symbol = '[❯](bold fg:red)' vimcmd_symbol = '[❮](bold fg:green)' vimcmd_replace_one_symbol = '[❮](bold fg:lavender)' vimcmd_replace_symbol = '[❮](bold fg:lavender)' vimcmd_visual_symbol = '[❮](bold fg:yellow)'

[cmd_duration] show_milliseconds = true format = " in $duration " style = "bg:lavender" disabled = false show_notifications = true min_time_to_notify = 45000

[palettes.catppuccin_mocha] rosewater = "#f5e0dc" flamingo = "#f2cdcd" pink = "#f5c2e7" mauve = "#cba6f7" red = "#f38ba8" maroon = "#eba0ac" peach = "#fab387" yellow = "#f9e2af" green = "#a6e3a1" teal = "#94e2d5" sky = "#89dceb" sapphire = "#74c7ec" blue = "#89b4fa" lavender = "#b4befe" text = "#cdd6f4" subtext1 = "#bac2de" subtext0 = "#a6adc8" overlay2 = "#9399b2" overlay1 = "#7f849c" overlay0 = "#6c7086" surface2 = "#585b70" surface1 = "#45475a" surface0 = "#313244" base = "#1e1e2e" mantle = "#181825" crust = "#11111b"

[palettes.catppuccin_frappe] rosewater = "#f2d5cf" flamingo = "#eebebe" pink = "#f4b8e4" mauve = "#ca9ee6" red = "#e78284" maroon = "#ea999c" peach = "#ef9f76" yellow = "#e5c890" green = "#a6d189" teal = "#81c8be" sky = "#99d1db" sapphire = "#85c1dc" blue = "#8caaee" lavender = "#babbf1" text = "#c6d0f5" subtext1 = "#b5bfe2" subtext0 = "#a5adce" overlay2 = "#949cbb" overlay1 = "#838ba7" overlay0 = "#737994" surface2 = "#626880" surface1 = "#51576d" surface0 = "#414559" base = "#303446" mantle = "#292c3c" crust = "#232634"

[palettes.catppuccin_latte] rosewater = "#dc8a78" flamingo = "#dd7878" pink = "#ea76cb" mauve = "#8839ef" red = "#d20f39" maroon = "#e64553" peach = "#fe640b" yellow = "#df8e1d" green = "#40a02b" teal = "#179299" sky = "#04a5e5" sapphire = "#209fb5" blue = "#1e66f5" lavender = "#7287fd" text = "#4c4f69" subtext1 = "#5c5f77" subtext0 = "#6c6f85" overlay2 = "#7c7f93" overlay1 = "#8c8fa1" overlay0 = "#9ca0b0" surface2 = "#acb0be" surface1 = "#bcc0cc" surface0 = "#ccd0da" base = "#eff1f5" mantle = "#e6e9ef" crust = "#dce0e8"

[palettes.catppuccin_macchiato] rosewater = "#f4dbd6" flamingo = "#f0c6c6" pink = "#f5bde6" mauve = "#c6a0f6" red = "#ed8796" maroon = "#ee99a0" peach = "#f5a97f" yellow = "#eed49f" green = "#a6da95" teal = "#8bd5ca" sky = "#91d7e3" sapphire = "#7dc4e4" blue = "#8aadf4" lavender = "#b7bdf8" text = "#cad3f5" subtext1 = "#b8c0e0" subtext0 = "#a5adcb" overlay2 = "#939ab7" overlay1 = "#8087a2" overlay0 = "#6e738d" surface2 = "#5b6078" surface1 = "#494d64" surface0 = "#363a4f" base = "#24273a" mantle = "#1e2030" crust = "#181926"


## 如何验证配置生效

配完之后,我一般会按下面这个顺序确认。

### 1. 确认默认 shell 已经切成 Zsh

```bash
echo $SHELL
echo $0
which zsh
zsh --version

正常情况下,$SHELL 会指向 zsh,当前 shell 也应该显示成 zsh

2. 确认 .zshrc 能正常加载

source ~/.zshrc

如果这里没有报错,说明基础配置至少能过第一关。

3. 确认 Starship 已经接管 prompt

which starship
starship --version

然后看提示符本身,你应该能看到分段式的 Powerline 样式,而不是 Oh My Zsh 默认主题。

4. 确认 zoxide 已经初始化成功

which zoxide
zoxide --version

再试一下跳目录。如果你已经有常去目录记录,输入 z 加目录关键字,应该就能直接跳过去。

5. 确认三个插件都真的在工作

  • zsh-autosuggestions,随便输入几个你常用命令的前缀,应该会出现灰色建议。
  • zsh-syntax-highlighting,输入一个不存在的命令,颜色应该会明显不一样。
  • fzf-tab,在目录较多的位置按 Tab,补全选择会比原生方式更好筛。

6. 进项目目录看 prompt 信息是否完整

进一个 Git 仓库,看看分支名和状态会不会显示。再进一个 Node 或 Python 项目,看看版本信息会不会跟着出来。如果这些都正常,说明 Starship 的主要模块已经接上了。

常见问题

Prompt 显示乱码或者方块

先确认终端已经启用了 Nerd FontCatppuccin Powerline 这类 preset 会大量使用图标和特殊分隔符,字体不对,显示基本就会出问题。

想切换 Starship 主题

重新运行 preset 命令就行:

starship preset <name> -o ~/.config/starship.toml

Oh My Zsh 感觉有点慢

先看 plugins 列表,删掉你根本不用的插件。Oh My Zsh 变慢,最常见的原因不是它本身,而是插件装得太随手。

这一篇配完以后,终端的“壳”和“脸”就都算收拾好了。你会明显感觉到,命令更好补全了,提示更及时了,目录跳转更省脑子了,Git 和语言环境信息也终于能在第一眼里看明白。下一篇,就可以继续把高频 CLI 工具也换成更顺手的版本。

系列文章导航

  1. Windows与WSL的终端美化(零)——系列概览
  2. Windows与WSL的终端美化(一)——WSL安装与配置
  3. Windows与WSL的终端美化(二)——WezTerm配置
  4. Windows与WSL的终端美化(三)——Zellij工作区管理
  5. Windows与WSL的终端美化(四)——Shell与Prompt配置(本篇)
  6. Windows与WSL的终端美化(五)——CLI工具链美化
  7. Windows与WSL的终端美化(六)——Catppuccin主题统一
目录

Comments (0)

No comments yet. Be the first!