打造现代化终端工作流:Zellij + Starship 完整配置
告别枯燥的黑白终端,用 Zellij 多路复用 + Starship 美化提示符,打造高效、好看的开发环境。Windows 和 macOS 双平台适配。
适用平台: Windows 10/11 · macOS
配色方案: Catppuccin Mocha
工具介绍
Zellij 是用 Rust 编写的现代终端多路复用器,可以在一个窗口内管理多个窗格和标签,断开连接后会话依然保留。相比 tmux,学习曲线更低,界面底部自带快捷键提示。
Starship 是跨 shell 的极速命令行提示符,支持 PowerShell、zsh、fish 等,可以显示 git 分支、语言版本、执行时长等信息,高度可定制。
本文使用 Catppuccin Mocha 配色方案,粉橙黄渐变风格,在深色终端背景下效果极佳。
安装 Zellij
Windows
Windows 从 Zellij 0.44.0 开始原生支持,直接下载二进制即可。
第一步:下载并解压
Invoke-WebRequest -Uri "https://github.com/zellij-org/zellij/releases/latest/download/zellij-x86_64-pc-windows-msvc.zip" -OutFile "$env:USERPROFILE\zellij.zip"
Expand-Archive "$env:USERPROFILE\zellij.zip" -DestinationPath "C:\Tools\zellij" -Force2
第二步:添加到系统 PATH
[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path","Machine") + ";C:\Tools\zellij", [EnvironmentVariableTarget]::Machine)
$env:Path = [Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [Environment]::GetEnvironmentVariable("Path","User")2
第三步:配置默认 shell
mkdir "$env:USERPROFILE\.config\zellij" -Force
'default_shell "powershell.exe"' | Out-File "$env:USERPROFILE\.config\zellij\config.kdl" -Encoding UTF82
第四步:验证安装
zellij --versionmacOS
macOS 推荐使用 Homebrew 安装,最为简便。
第一步:安装
brew install zellij第二步:配置默认 shell
mkdir -p ~/.config/zellij
echo 'default_shell "/bin/zsh"' > ~/.config/zellij/config.kdl2
第三步:验证安装
zellij --version💡 也可以不安装直接试用:
bash <(curl -L https://zellij.dev/launch)
安装 Starship
Windows
第一步:下载并安装
Invoke-WebRequest -Uri "https://github.com/starship/starship/releases/latest/download/starship-x86_64-pc-windows-msvc.zip" -OutFile "$env:USERPROFILE\starship.zip"
Expand-Archive "$env:USERPROFILE\starship.zip" -DestinationPath "C:\Tools\starship" -Force
[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path","Machine") + ";C:\Tools\starship", [EnvironmentVariableTarget]::Machine)2
3
第二步:配置 PowerShell 自动加载
if (!(Test-Path $PROFILE)) { New-Item $PROFILE -Force }
Add-Content $PROFILE "`nInvoke-Expression (&starship init powershell)"2
macOS
第一步:安装
brew install starship第二步:配置 zsh 自动加载
在 ~/.zshrc 末尾加入:
echo 'eval "$(starship init zsh)"' >> ~/.zshrc
source ~/.zshrc2
应用 Starship 配置
本文使用 Catppuccin Mocha 主题配置,效果为粉橙黄渐变提示符,并在右侧显示当前目录的语言版本(Node.js、Java、Python、Rust 等)。
Windows
mkdir "$env:USERPROFILE\.config" -Force
notepad "$env:USERPROFILE\.config\starship.toml"2
将配置内容粘贴进去保存,然后设置环境变量:
[Environment]::SetEnvironmentVariable("STARSHIP_CONFIG", "$env:USERPROFILE\.config\starship.toml", [EnvironmentVariableTarget]::User)macOS
mkdir -p ~/.config
nano ~/.config/starship.toml2
💡 macOS 上
STARSHIP_CONFIG默认指向~/.config/starship.toml,无需额外设置环境变量。
配置文件内容
将以下内容完整粘贴到 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)\
$cmd_duration\
$line_break\
$character"""
right_format = """
$conda\
$nodejs\
$python\
$java\
$rust\
$golang"""
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 = 0
truncate_to_repo = false
[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 = "sapphire"
format = '[$symbol$environment]($style)'
ignore_base = false
[time]
disabled = true
[line_break]
disabled = false
[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"2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
安装 Nerd Font 字体
Starship 配置中使用了大量图标,需要安装 Nerd Font 才能正常显示,否则会出现乱码。
Windows
第一步:下载 FiraCode Nerd Font
Invoke-WebRequest -Uri "https://github.com/ryanoasis/nerd-fonts/releases/latest/download/FiraCode.zip" -OutFile "$env:USERPROFILE\FiraCode.zip"
Expand-Archive "$env:USERPROFILE\FiraCode.zip" -DestinationPath "$env:USERPROFILE\FiraCode" -Force2
第二步:安装字体
打开解压目录 → 进入 ttf 文件夹 → 全选(Ctrl+A)→ 右键 → 为所有用户安装
第三步:在 Windows Terminal 中设置字体
Ctrl+, 打开设置 → 左侧选 PowerShell → 外观 → 字体改为 FiraCode Nerd Font → 保存
macOS
brew tap homebrew/cask-fonts
brew install --cask font-fira-code-nerd-font2
安装后在 iTerm2 中设置:Preferences → Profiles → Text → Font → 选择 FiraCode Nerd Font
配置自动启动
让打开终端时自动进入 Zellij,Zellij 内的每个窗格都运行配置好的 shell + Starship。
Windows Terminal
打开设置 → 左下角「打开 JSON 文件」,找到 PowerShell 配置块,加入 commandline:
{
"name": "Windows PowerShell",
"commandline": "powershell.exe -NoExit -Command \"zellij\"",
"guid": "...",
"hidden": false
}2
3
4
5
6
macOS(zsh)
在 ~/.zshrc 末尾加入以下代码:
# 自动启动 zellij(仅在非 zellij 环境中,避免嵌套)
if [[ -z "$ZELLIJ" ]]; then
zellij
fi2
3
4
Tabby
在 config.yaml 的 profiles: 列表中添加:
- type: local
name: PowerShell
icon: fas fa-terminal
options:
command: powershell.exe
args:
- -NoExit
- -Command
- zellij
id: local:powershell2
3
4
5
6
7
8
9
10
💡 Tabby 配置文件路径:
C:\Users\{用户名}\AppData\Roaming\tabby\config.yaml
常用快捷键速查
| 快捷键 | 功能 |
|---|---|
Ctrl + p | 面板模式(新建 / 关闭窗格) |
Ctrl + n | 新建 Tab |
Ctrl + t | Tab 管理 |
Ctrl + s | 滚动模式(翻看历史输出) |
Ctrl + o | 会话管理 |
Ctrl + q | 退出 Zellij |
Zellij 界面底部会实时显示当前模式的快捷键,不用死记。
整套配置完成后:打开终端 → 自动进入 Zellij → 每个窗格都有 Starship 美化提示符,开发体验大幅提升。
💬 评论