0x01 Starship 是什么
Starship 是一个轻量、快速且高度可定制的终端提示符工具,适用于所有主流 Shell(如 Bash、Zsh、PowerShell)和操作系统(Windows、macOS、Linux 等)。它通过动态显示 Git 仓库状态、系统信息、环境变量等实用数据,结合图标和个性化配色,帮助用户打造美观且功能丰富的终端界面。其核心特点包括:轻量快速、高度可定制、跨平台兼容,以及对 Nerd Fonts 的支持(如 Fira Code Nerd Font,可显示精美图标)。它通过简洁的配置文件实现个性化设置,同时提供预设配置方案供用户参考。
我习惯在 Windows 上开发(使用 PowerShell)并在 Debian 12/13 上测试项目(使用 Bash,自定义配置),我之前尝试过 Oh-My-Posh 项目,但是效果一言难尽,每次开终端能卡七八秒,回车后也不流畅卡卡卡卡卡卡,有时候 Ctrl + C 还有可能卡出去(已红温)。
0x02 折腾的前期准备
如果你想要开始折腾,请考虑拥有以下设备:
- 一个能正常工作的终端(PowerShell 或者 Bash 或者 Zsh 均可)
- 您的终端能通过您的运营商连接到互联网
- 您能熟练使用记事本(在 Windows 环境下)或 nano/Vim(在 Linux 环境下)
👉 点击展开查看本文字体特殊配置
为避免阅读下文时出现方框乱码字符,建议您在浏览器中按 F12 打开开发者工具,在控制台中执行以下脚本。脚本将自动加载所需字体,确保内容显示完整美观。
(function () {
const style = document.createElement("style");
style.textContent = `
@font-face {
font-family: 'FiraCode Nerd Font Mono Reg';
src: url('https://cdn.jsdelivr.net/gh/ryanoasis/nerd-fonts@master/patched-fonts/FiraCode/Regular/FiraCodeNerdFontMono-Regular.ttf') format('truetype');
font-weight: normal;
font-style: normal;
font-display: swap;
}
.expressive-code pre > code {
font-family: 'FiraCode Nerd Font Mono Reg', ui-monospace !important;
}
`;
document.head.appendChild(style);
})();
0x03 安装 Starship
在 Linux 上,你可以使用这个一键脚本进行安装:
curl -sS https://starship.rs/install.sh | sh
而在 Windows 上,我推荐你使用 winget 进行安装:
winget install --id Starship.Starship
如果你在 Termux 上折腾,请使用如下命令安装:
pkg install starship
如果你的机器比较特殊(或者用上述方法安装失败了),你仍然可以使用 cargo 安装(前提是你安装了 Rust):
cargo install starship --locked
如果你按以上步骤成功安装了,那么接下来你需要为你的终端配置使用 Starship,这可以通过这些方法实现:
Bash
在 ~/.bashrc 的最后,添加以下内容:
# ~/.bashrc
eval "$(starship init bash)"
Zsh
在 ~/.zshrc 的最后,添加以下内容:
# ~/.zshrc
eval "$(starship init zsh)"
PowerShell
将以下内容添加到 Microsoft.PowerShell_profile.ps1。你可以在 PowerShell 通过 $PROFILE 变量来查询文件的位置。对于 -Nix 来说,通常文件路径是 ~\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 或 ~/.config/powershell/Microsoft.PowerShell_profile.ps1。
Invoke-Expression (&starship init powershell)
Cmd
您需要使用 Clink (v1.2.30+) 与 Cmd. 将以下文件添加到文件 starship.lua 中,并将此文件放置在 Clink 脚本目录中:
-- starship.lua
load(io.popen('starship init cmd'):read("*a"))()
0x04 配置 Starship
创建配置文件
为 Starship 创建配置文件 ~/.config/starship.toml:
mkdir -p ~/.config && touch ~/.config/starship.toml
Starship 的所有配置都在这样一个 TOML 文件内:
# 为 IDE 提供 schema 实现自动补全
"$schema" = 'https://starship.rs/config-schema.json'
# 在提示符之间插入空行
add_newline = true
# 将提示符中的 '❯' 替换为 '$'
[character] # 此组件名称为 'character'
success_symbol = '[\$](bold green)'
# 禁用 'package' 组件,将其隐藏
[package]
disabled = true
设置配置文件路径
我们可以使用 STARSHIP_CONFIG 环境变量更改默认配置文件的位置:
export STARSHIP_CONFIG=~/non-default-path/starship.toml
在 PowerShell (Windows) 中,在 $PROFILE 中添加下面的代码行能达到同样的效果:
$ENV:STARSHIP_CONFIG = "$HOME\non-default-path\starship.toml"
更多的内容可以参考官方文档,这里不再赘述。
开始定制!
参考官方文档,我将修改提示符:
format = """
$username\
$hostname\
$localip\
...
$cmd_duration\
$line_break\
$character"""
# 右侧提示符,下文会提到
right_format = """
$battery\
$time\
"""
# 在提示符之间插入空行
add_newline = true
# 指示超时时间,避免大部分情况下出现的警告
command_timeout = 1000
# Disable the package module, hiding it from the prompt completely
[package]
disabled = true
# Replace the '❯' symbol in the prompt with '$'
[character]
success_symbol = '[\$](bold white)'
error_symbol = '[\$](bold red)'
vimcmd_symbol = '[\$](bold green)'
vimcmd_replace_one_symbol = '[\$](bold purple)'
vimcmd_replace_symbol = '[\$](bold purple)'
vimcmd_visual_symbol = '[\$](bold yellow)'
这样其实已经很接近我想要的效果了,但是我不喜欢中间的一堆 at 或 via,所以我们需要单独配置每一个并为其修改展示格式 format:
# 有方框不要紧,使用字体设置为 Fira Code Nerd Font 的记事本复制粘贴就能看到!
[directory]
format = '[$path]($style)[$read_only]($read_only_style) '
style = 'bold green'
read_only = " "
[hostname]
ssh_only = false
disabled = false
style = 'bold cyan'
ssh_symbol = " "
[username]
disabled = false
show_always = true
style_user = 'bold blue'
format = '[$user]($style) @ '
[git_branch]
format = '[$symbol$branch]($style) '
symbol = " "
[git_status]
format = '([$all_status$ahead_behind]($style))'
[git_commit]
tag_symbol = ' '
很棒!我们接下来启用一些默认不启用的组件并配置他们:
[[battery.display]]
threshold = 10 # 电量 10%~90%
style = 'bold red'
[[battery.display]]
threshold = 90 # 电量 90%+
style = 'bold green'
charging_symbol = '⚡️ ' # 正在充电
discharging_symbol = '💦 ' # 正在放电
[memory_usage]
disabled = false # 取消默认的禁用
threshold = 70 # 内存占用高于 70% 启用
format = '$symbol[${ram}/${ram_pct}( | ${swap}/${swap_pct})]($style) ' # 同时显示 物理内存 + 占用 和 虚拟内存 + 占用
symbol = ' '
style = 'dimmed white'
[cmd_duration]
min_time = 500 # 单位毫秒
format = 'took [$duration]($style)'
show_milliseconds = true # 显示为 114s514ms
[time]
disabled = false
format = '🕙 [$time]($style) '
time_format = '%T'
恭喜你,你获得了一个相当好看的(我是这么认为的)终端,快去向朋友炫耀吧~
如果你想抄作业请移步至我们的 liuzhen932/dotfiles,那里有全套的配置方便你快速上手。
0x05 附录与参考资料
Starship
Nerd Font
Nerd Fonts 通过修改开发者常用的字体,为其添加了大量符号和图标,尤其是从 Font Awesome、Devicons、Octicons 等流行图标库中整合的符号。
nano
nano 是 Unix 系统中一款轻量级、易用的命令行文本编辑器,界面直观无模式切换,适合新手快速编辑文件,通过底部菜单栏的快捷键完成保存、退出等操作。
::: The
iLE88Dj. :jD88888Dj:
.LGitE888D.f8GjjjL8888E; .d8888b. 888b 888 888 888
iE :8888Et. .G8888. d88P Y88b 8888b 888 888 888
;i E888, ,8888, 888 888 88888b 888 888 888
D888, :8888: 888 888Y88b 888 888 888
D888, :8888: 888 88888 888 Y88b888 888 888
D888, :8888: 888 888 888 Y88888 888 888
D888, :8888: Y88b d88P 888 Y8888 Y88b. .d88P
888W, :8888: "Y8888P88 888 Y888 "Y88888P"
W88W, :8888:
W88W: :8888: 88888b. 8888b. 88888b. .d88b.
DGGD: :8888: 888 "88b "88b 888 "88b d88""88b
:8888: 888 888 .d888888 888 888 888 888
:W888: 888 888 888 888 888 888 Y88..88P
:8888: 888 888 "Y888888 888 888 "Y88P"
E888i
tW88D Text Editor Homepage
Vim
Vim 是一款基于命令行的高效、轻量级文本编辑器,由 Bram Moolenaar 开发,是经典编辑器 Vi 的扩展版本。它通过独特的模式化操作实现高效编辑,用户通过组合按键而非鼠标快速完成导航、修改、搜索等操作。Vim 支持高度定制化配置,可在 Linux、macOS、Windows 等平台运行,尤其适合开发者和需要频繁处理代码或文本的用户。
总结
那么本篇文章就到这里,有任何问题或者展示你的炫酷终端欢迎留言讨论,期待和你共同进步!(话说字符画真的占字数啊,一下子文章就多了两千字符)