终端也可以很好用:Starship + zoxide + fzf,把命令行折腾顺手

我以前一直觉得终端这种东西,黑底白字能敲命令就行。

直到项目多起来以后,事情开始变得有点烦:现在在哪个目录?这是哪个 Git 分支?Go、Python、Node 到底切到什么版本了?刚才那个藏在六层目录里的项目又放哪儿了?

这些问题一个都不难,但每天回答几十次,还是挺烦。

后来我的做法逐渐稳定成三个小工具:

  • Starship:把当前目录、Git 分支、语言环境这些信息放到提示符里;
  • zoxide:记住常去的目录,以后不再手敲一长串 cd
  • fzf:给命令行加一个很好用的模糊搜索框。

它们都很轻,配置量也不大。十几分钟装完,之后每天都能用到。

如果你的 Windows / WSL 环境还没配好,可以先看站内这篇:Windows 11 + WSL2 开发环境搭建全教程。如果经常重装电脑,用 winget 恢复开发环境 也可以一起配。


先说效果:Starship 负责让你一眼看懂自己在哪

Starship 是一个跨 Shell 的提示符工具。PowerShell、Bash、Zsh、Fish、Nushell 都能用。

它最方便的地方不是“好看”,而是会根据当前目录自动显示有用的信息。进入 Go 项目就显示 Go,进入 Git 仓库就显示分支,命令跑得比较久还能顺手告诉你耗时。

Starship Tokyo Night 预设

图:Starship 官方 Tokyo Night 预设。来源:Starship 官方文档。

Windows 安装

Windows 直接用 winget:

winget install --id Starship.Starship

然后打开 PowerShell:

notepad $PROFILE

如果提示文件不存在,先创建:

New-Item -ItemType File -Path $PROFILE -Force

在文件末尾加入:

Invoke-Expression (&starship init powershell)

保存后重新打开 PowerShell。

WSL / Linux

Starship 官方安装脚本:

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

Bash 用户把下面这行加到 ~/.bashrc

eval "$(starship init bash)"

然后:

source ~/.bashrc

Ubuntu 25.04 及更新版本也可以直接:

sudo apt install starship

Starship 官方当前也提供 winget、Chocolatey、Scoop、Homebrew 等安装方式,没必要为了装一个提示符再折腾半天。

官方文档:https://starship.rs/guide/


不想装 Nerd Font?完全可以

网上很多终端截图满屏特殊图标,第一反应通常是:又要装字体。

确实,Tokyo Night、Pastel Powerline 这类预设需要 Nerd Font。不过 Starship 自己就提供了不依赖 Nerd Font 的预设。

比如:

mkdir -p ~/.config
starship preset plain-text-symbols -o ~/.config/starship.toml

PowerShell 里同样可以执行:

New-Item -ItemType Directory -Path "$HOME/.config" -Force | Out-Null
starship preset plain-text-symbols -o "$HOME/.config/starship.toml"

效果很朴素,但信息够用:

Starship Plain Text Symbols

图:Starship 官方 Plain Text Symbols 预设。它专门给没有 Nerd Font / Unicode 条件的环境准备。

如果你愿意装 Nerd Font,再试:

starship preset tokyo-night -o ~/.config/starship.toml

或者:

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

我自己的建议是先用默认配置两天。等你真的觉得某块信息多余,再删;真的觉得缺什么,再加。

终端配置最容易犯的毛病,就是第一天兴冲冲复制一份 400 行 TOML,第二周自己都不知道哪一行在控制什么。


zoxide:终于不用记项目到底藏在哪一层目录

这个工具我很喜欢。

zoxide 可以理解成一个会记路的 cd。你去过哪些目录、哪些目录经常用,它会慢慢记住。

假设我的项目在:

/opt/Projects/Yunshu_Studio/YSAIC

传统写法:

cd /opt/Projects/Yunshu_Studio/YSAIC

用了几次 zoxide 以后:

z ysaic

就到了。

甚至同时有好几个名字相似的项目,也可以:

z yunshu ysaic

它会按照目录匹配程度和使用频率找最合适的那个。

zoxide 跳转目录示例

图:zoxide 项目示例图。来源:zoxide GitHub 仓库。

Windows

官方目前推荐 winget:

winget install ajeetdsouza.zoxide

然后把下面这行放进 $PROFILE

Invoke-Expression (& { (zoxide init powershell | Out-String) })

Bash / WSL

官方推荐安装脚本:

curl -sSfL https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | sh

然后在 ~/.bashrc 末尾加:

eval "$(zoxide init bash)"

重新加载:

source ~/.bashrc

如果你在中国大陆网络环境里访问 GitHub Raw 不稳定,我更建议临时处理好 GitHub 网络,或者在已经安装 Rust 的机器上使用:

cargo install zoxide --locked

不太建议从随便搜出来的第三方网盘下载二进制文件。一个为了省两分钟装的终端工具,没必要顺便给自己增加供应链风险。

zoxide 官方文档:https://github.com/ajeetdsouza/zoxide


fzf:给终端塞一个模糊搜索框

fzf 做的事情特别简单:给它一堆文本,它让你边打字边筛选,最后把选中的那一行返回来。

例如:

git branch | fzf

项目文件太多:

find . -type f | fzf

想从历史命令里挑一条:

history | fzf

它真正好用的地方在于能和其他命令随便拼。

Windows

winget install fzf

装完直接试:

Get-ChildItem | fzf

Ubuntu / Debian

sudo apt install fzf

新版 fzf 的 Bash Shell 集成可以直接这样开:

eval "$(fzf --bash)"

放进 ~/.bashrc 后,会获得模糊补全和快捷键支持。

不过这里有个版本坑:zoxide 当前要求 fzf 至少为 0.51.0。某些较老的 Ubuntu 仓库可能给你一个更旧版本,所以装完最好看一眼:

fzf --version

版本太旧,就按 fzf 官方 README 使用官方发布包、Homebrew、mise 或 Git 安装方式更新。

fzf 官方文档:https://github.com/junegunn/fzf


zoxide + fzf 放一起才开始有意思

装好 fzf 以后,zoxide 的:

zi

会弹出交互式目录选择。

你不需要准确记得项目目录叫什么,只要打几个模糊字符,然后上下选一下就行。

我自己最常见的一套动作大概是:

z ysaic

git status

gi=$(git branch --format='%(refname:short)' | fzf)
git switch "$gi"

PowerShell 也可以写得差不多:

$branch = git branch --format='%(refname:short)' | fzf
git switch $branch

这类小组合用久了之后,长路径和一堆候选项会越来越少出现在脑子里。

机器记路径,人记事情。


我会怎么配:够用就收手

如果只想要一个轻量配置,我会这样:

add_newline = false

[directory]
truncation_length = 3
truncate_to_repo = true

[git_branch]
symbol = "git:"

[cmd_duration]
min_time = 1000
format = "took [$duration]($style) "

[character]
success_symbol = "[>](bold green)"
error_symbol = "[>](bold red)"

文件放到:

~/.config/starship.toml

它不炫,但已经能解决大部分问题:目录别太长、Git 分支看得到、慢命令显示耗时、失败命令颜色不一样。

剩下的以后碰到需求再加。


顺便说几个我踩过的小坑

1. PowerShell Profile 不是默认一定存在

所以第一次执行:

notepad $PROFILE

报不存在很正常,创建就行。

2. Windows 和 WSL 是两套 Shell 环境

Windows PowerShell 的配置不会自动跑进 WSL,WSL 的 .bashrc 也不会反过来影响 PowerShell。

你可以让两边共用类似的 Starship 配置,但初始化脚本还是分别写。

3. 不要为了截图效果把启动速度搞烂

每开一个终端就跑五六个外部程序、抓 Git 状态、查网络、画系统 Logo,很快就会从“真漂亮”变成“怎么又卡了一下”。

提示符每次执行命令都会回来一次,几十毫秒的东西堆多了真能感觉出来。

4. 字体乱码时先别怀疑 Starship

Powerline 符号变方块,十有八九是 Nerd Font 没装、装了没选,或者当前终端 Profile 没用那个字体。

嫌麻烦就用 plain-text-symbols,完全没什么损失。


最后

我挺喜欢这类小工具,因为它们没有试图重新发明终端。

cd 还是 cd,Git 还是 Git,PowerShell 和 Bash 也没换。只是那些每天会重复几十遍、又没什么技术含量的小动作被削掉了一点。

终端折腾到最后,我觉得最好用的状态大概就是:打开它以后不会先注意到“我配置得真漂亮”,而是很自然地开始干活。

如果你平时主要在 Windows 上开发,站内这几篇也可以接着看:

参考资料