终端效率翻倍实战:fzf + zoxide + ripgrep + bat 组合拳,告别重复敲命令

终端效率翻倍实战:fzf + zoxide + ripgrep + bat 组合拳,告别重复敲命令

前言:你的手指正在浪费生命

如果你每天要在终端里干这些事:

  • 反复 cd 一层层钻进深目录(cd ~/work/project-a/src/utils/helpers
  • 翻半天历史命令,只为了找回 3 小时前敲过的那条
  • grep 搜代码,却因为忽略规则、二进制文件、无高亮而气得跺脚
  • cat 看文件,长文件刷屏到想砸键盘
  • ls 看目录,没有 git 状态、没有层级,信息密度低得可怜

那么恭喜你,这篇文章就是为你写的。

我会介绍一套开箱即用的现代终端工具组合fzf(模糊查找)、zoxide(智能跳转)、ripgrep(极速搜索)、bat(优雅预览)、eza(现代 ls)、starship(轻量提示符)。它们可以独立使用,但组合起来威力最大------学会之后,你的终端操作速度至少翻一倍

本文所有命令均在 bash / zsh 下验证,同时给出 Windows PowerShell 的对应方案。代码可以直接复制运行。

一、先安装这六件套

不同系统的安装方式(任选其一):

bash 复制代码
# macOS
brew install fzf zoxide ripgrep bat eza starship

# Ubuntu / Debian
sudo apt install fzf ripgrep bat
# zoxide / eza / starship 用官方脚本(避免 apt 源版本过老)
curl -sS https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | bash
curl -sS https://eza.rocks/install.sh | bash
curl -sS https://starship.rs/install.sh | sh

# Windows(winget / scoop)
winget install junegunn.fzf zoxide ripgrep sharkdp.bat eza-community.eza starship
# 或 scoop 一条龙:
scoop install fzf zoxide ripgrep bat eza starship

安装后验证版本:

bash 复制代码
fzf --version && zoxide --version && rg --version | head -1
bat --version && eza --version | head -1 && starship --version

注意:Ubuntu 的 bat 包名是 bat,但可执行文件叫 batcat(避免与 baculabat 冲突)。装完做个软链:ln -s /usr/bin/batcat /usr/bin/bat

二、fzf:终端里的模糊查找神器

fzf 是一个通用模糊查找器 :你输入几个字符,它实时过滤候选列表,支持预览窗口、多选、键盘操作(Ctrl-J/K 上下、Tab 多选、Enter 确认、Esc 取消)。

2.1 启用三个杀手级快捷键

把下面这行加进 ~/.bashrc~/.zshrc

bash 复制代码
# bash
eval "$(fzf --bash)"
# zsh
eval "$(fzf --zsh)"

之后你立刻获得三个能力:

快捷键 功能 示例
Ctrl-R 模糊搜索历史命令 docker + Ctrl-R,所有含 docker 的历史命令立刻过滤出来
Ctrl-T 把当前目录下的文件/目录路径插入命令行 vim 然后 Ctrl-T,选文件自动补全路径
Alt-C 模糊搜索并跳转目录 在任意目录敲 Alt-C,输入关键字即可 cd 过去

2.2 让 fzf 更好用的核心配置

bash 复制代码
export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border --preview-window=right:60%'
# 默认预览:用 bat 高亮显示候选文件内容
export FZF_DEFAULT_COMMAND='rg --files --hidden --follow -g "!{.git,node_modules,vendor,target,dist,build,.venv}"'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_CTRL_T_OPTS='--preview "bat --color=always --line-range=:100 {}"'

这里的关键点:

  • FZF_DEFAULT_COMMANDCtrl-T 直接基于 ripgrep 的文件列表(忽略 node_modules.git 等),速度碾压默认的 find
  • --preview 让选中文件时右侧实时渲染内容预览,不用打开文件就知道里面是什么
  • --layout=reverse 让列表从底部向上展开,更符合阅读习惯

2.3 fzf 的进阶玩法

① 模糊搜索并打开文件(配合 vim):

bash 复制代码
# 在 vim 里按 Ctrl-P 打开文件
vim -o "$(fzf --preview 'bat --color=always {}')"

② git 分支快速切换:

bash 复制代码
git checkout "$(git branch -a | grep -v HEAD | fzf --preview 'git log --oneline --graph {} | head -20')"

③ 进程 kill:

bash 复制代码
kill -9 "$(ps -ef | fzf --multi | awk '{print $2}')"

④ 多选批量操作(比如批量删除文件):

bash 复制代码
fzf --multi | xargs rm -v

三、zoxide:从此告别 cd

zoxide 是一个智能目录跳转工具 ,核心是 z 命令。它用「frecency」算法(频率 + 新鲜度)记住你去过的目录:

bash 复制代码
# 初始化(加入 shell 配置)
eval "$(zoxide init bash)"   # zsh 用 zoxide init zsh

使用方式:

bash 复制代码
z proj          # 跳到最近访问的、名字含 proj 的目录(模糊匹配)
z proj-a src    # 多关键字精确跳转:~/work/project-a/src
zi              # 交互式选择(基于 fzf 的目录选择器)
z -             # 回到上一个 z 跳转的目录

几个真实场景:

bash 复制代码
# 场景:以前
cd ~/work/project-b/frontend/src/components
# 现在
z proj-b comp

数据存在哪? ~/.local/share/zoxide/db.zo(SQLite),可以用 zoxide query --list 查看所有记录、zoxide add ~/xxx 手动添加、zoxide remove ~/xxx 删除。

Windows PowerShell 用户:

powershell 复制代码
# PowerShell 配置里加
zoxide init powershell | Invoke-Expression
# 然后用 z 命令即可;Set-Location 语义完全一致

避坑:z 只匹配「你去过」的目录。换新机器或目录被删后记录会失效,属正常现象。配合 z -zi 使用体验最佳。

四、ripgrep + bat:搜索与阅读的黄金组合

4.1 ripgrep:现代 grep

rg 相比 grep 的优势:默认递归、默认忽略 .gitignore 中的文件、默认隐藏文件不搜、自动跳过二进制文件、并行执行、输出带颜色

常用姿势:

bash 复制代码
rg "TODO"                    # 全项目搜 TODO
rg -n "login" src/           # 带行号
rg -i "user_id" --type py    # 忽略大小写 + 限定 Python 文件
rg -l "error" --glob "*.js"  # 只输出文件名
rg -uu "password"            # 连被忽略的文件也搜(-uu = 无视 .gitignore)
rg --stats "panic"           # 搜完显示统计信息

搜索时同时显示上下文:

bash 复制代码
rg -C 3 "func main"          # 前后各 3 行
rg -A 5 "TODO"               # 只看后面 5 行

把 rg 和 fzf 联动------全项目文件内容搜索:

bash 复制代码
# 搜索所有包含关键字的文件,再在结果里模糊筛选
rg -l "rate_limit" . | fzf --preview 'bat --color=always --line-range=:80 {}'

这是我最常用的一条命令:先粗搜再细筛,比任何 IDE 的全局搜索都快。

4.2 bat:带高亮和行号的 cat

batcat 的现代替代品:语法高亮、行号、git 变更标记、分页显示

bash 复制代码
bat package.json                     # 自动识别 JSON 语法
bat -l python script.py              # 强制指定语言
bat --line-range 10:40 server.js     # 只看第 10-40 行
bat --theme="Monokai Extended" app.ts # 换主题

一个特别有用的场景------结合 git diff

bash 复制代码
# 用 bat 渲染 git diff(--diff 会隐藏未变更行,聚焦增删)
git diff | bat --diff

Windows PowerShell 提示: bat 在 PS 里默认使用 $env:BAT_THEME,建议设为 ansi 以兼容 PowerShell 的颜色模式。

五、eza:现代版 ls

eza(原 exa)是 ls 的增强版:彩色输出、文件类型图标、git 状态、树形结构

bash 复制代码
eza -l --git          # 详细列表 + git 状态列
eza -la --icons       # 显示图标
eza --tree --level=2  # 树形目录结构(神器)
eza -s modified       # 按修改时间排序

配置别名(加入 shell 配置):

bash 复制代码
alias ls="eza --icons"
alias ll="eza -la --git --icons"
alias lt="eza --tree --level=2 --icons"

对比一下:ls -la 输出一行行枯燥信息;eza -la --git 直接告诉你哪个文件被改动过、是新增还是修改,配合 --tree 看项目结构一目了然。

注意:eza 的图标渲染依赖终端字体支持 Nerd Font。Windows Terminal / VS Code 终端装一个 Nerd Font 即可。

六、starship:轻量且信息密度高的提示符

starship 是一个跨 shell 的提示符工具,特点:快(Rust 写的)、配置简单(TOML)、开箱即用

bash 复制代码
# 初始化
starship init bash | source    # 或 zsh / fish / powershell

装上后你会立刻看到:git 分支、修改状态、Node/Python/Rust 版本、上条命令耗时......全部自动显示。

定制示例(~/.config/starship.toml):

toml 复制代码
# 关闭默认的多余换行,节省空间
add_newline = false

# 显示命令耗时(超过 2 秒标红)
[cmd_duration]
min_time = 2000
style = "red bold"

# 目录只显示最后两级,避免路径过长
[directory]
truncation_length = 2

# git 分支加上图标
[git_branch]
symbol = " "

# 自定义一个"注意"提示段
[custom.warning]
command = "test -f .env && echo '⚠️ .env present'"
when = "true"

为什么要用它? 默认 bash 提示符只有 user@host:~$,信息量为零;starship 把「你在哪个分支、环境是否就绪、上条命令多久」都直接摆在你眼前,减少不必要的 git statuspwd 次数。

七、组合实战:三个真实场景

场景一:快速定位并修复 bug

bash 复制代码
# 1. 模糊搜索包含报错关键字的文件
rg -l "TypeError.*undefined" src/ | fzf --preview 'bat --color=always {}'
# 2. 选中后直接 vim 打开
vim "$(!!)"   # 或:vim "$(rg -l 'TypeError' src/ | fzf)"

场景二:多项目之间快速切换

bash 复制代码
# 1. 用 z 跳转(记得先去过的目录)
z my-service
# 2. 在项目内用 eza 树形看结构
lt
# 3. 用 rg 找入口文件
rg -l "createServer|app.listen"

场景三:日志排查

bash 复制代码
# 实时看日志 + 关键字过滤 + 高亮
tail -f app.log | rg --line-buffered "ERROR|WARN" | bat -l log
# 先看最近 200 行里的错误,再用 fzf 交互筛选
tail -200 app.log | fzf --preview 'echo {} | bat -l log'

rg --line-buffered 必须加:否则管道中的 rg 会缓冲输出,实时日志看不到效果。

八、避坑清单

  1. 不要一次性全换 :先从 fzf + zoxide 开始,用一周形成肌肉记忆,再加 rg/bat/eza。一次引入太多工具会手忙脚乱。
  2. 保留原命令zoxide init 默认保留 cdalias ls="eza" 也别删掉原始 ls,脚本兼容性靠它。需要原版时用 \lscommand ls
  3. fzf 在旧版 bash(< 4.0)不支持 :macOS 自带的 bash 3.2 需要 brew install bash 升级,或改用 zsh。
  4. Windows 用户注意 PowerShell 版本zoxide init powershell 需要 PowerShell 5.1+;Alt-C 在 PSReadLine 里需要手动绑定:
powershell 复制代码
# PowerShell $PROFILE 里给 fzf 补快捷键
Set-PSReadLineKeyHandler -Key Ctrl+t -ScriptBlock { fzf | ForEach-Object { Set-Location $_ } }
Set-PSReadLineKeyHandler -Key Ctrl+r -Function HistorySearchBackward
  1. eza 图标不显示:99% 是终端字体问题,装 Nerd Font 后重启终端。
  2. rg 搜不到文件先查 .gitignorerg -uu 能搜到说明是忽略规则的问题;别怀疑 rg 坏了。

九、效率清单(直接抄)

bash 复制代码
# ~/.bashrc 或 ~/.zshrc 追加:
eval "$(fzf --bash)"                       # fzf 快捷键
eval "$(zoxide init bash)"                 # z 跳转
export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --preview-window=right:60%'
export FZF_DEFAULT_COMMAND='rg --files --hidden -g "!{.git,node_modules,vendor,target,dist,build,.venv}"'
export FZF_CTRL_T_OPTS='--preview "bat --color=always --line-range=:100 {}"'
alias ls="eza --icons"
alias ll="eza -la --git --icons"
alias lt="eza --tree --level=2 --icons"

加完执行 source ~/.bashrc,然后体验一下:

  1. Ctrl-R 搜一条历史命令 → 爽
  2. z + 项目名 → 秒跳 → 爽
  3. rg 搜代码 + bat 高亮 → 爽
  4. lt 看项目结构 → 爽

结语

工具的价值不在于"高级",而在于减少你与目标之间的按键次数。这套组合拳的核心思路:

  • fzf 消灭"翻找"(历史、文件、目录、进程)
  • zoxide 消灭"cd 路径记忆"
  • rg + bat 消灭"低效搜索和阅读"
  • eza 消灭"信息量不足的 ls"
  • starship 消灭"无信息的提示符"

不需要一次全学会,先装 fzfzoxide,用起来,一周后再加下一个。效率提升 50% 只需要 10 分钟配置,剩下的交给肌肉记忆。

如果你有更骚的终端技巧,欢迎在评论区分享,互相抄作业 🤝

相关推荐
黄金决明子1 小时前
Vue3 + Vite 打包后打开空白?
前端
宿6741 小时前
vue3-env环境
前端·vue.js
蔬菜_1 小时前
前端转全栈-day5(数组、list、set)
java·前端·数据结构·list
汉堡大王95271 小时前
Vue 3 + TS + Element Plus 实战:如何从零搭建企业级违章记录管理 SaaS 前端
前端·javascript·vue.js
minimoon_jojo1 小时前
Ant Design 树形表格渲染原理
前端
paopaokaka_luck2 小时前
基于springboot3+vue3的音乐推荐系统(协同过滤算法、Echarts图形化分析)
前端·echarts
八号当铺2 小时前
使用 Figma Agent Kit:插件 + MCP + 还原 Skill,打通本地设计协作
前端·人工智能·ai编程
一心只读圣贤书3 小时前
AI 辅助前端国际化实践:从文案梳理到多语言资源治理
前端
无责任此方_修行中3 小时前
搓了一个国产大模型与 AI Agent 比价工具
前端·后端·ai编程