命令行四件套:fd / rg / fzf / bat

TL;DR

fd、ripgrep、fzf、bat 是四个现代命令行工具,分别替代 find、grep、cat,并额外引入交互式模糊搜索,组合起来尤其强大。


引言

findgrepcat 没有问题------它们工作了几十年,今天仍然能用。

但 " 能用 " 和 " 好用 " 之间有距离。语法繁琐、输出没有高亮、速度在大型代码库下差强人意......这些摩擦日积月累,默默消耗效率。

有四个工具可以直接替换它们,安装后几乎不需要学习成本:

旧工具 新工具 核心优势
find fd 语法直观,自动忽略 .gitignore
grep rg(ripgrep) 速度极快,输出友好
--- fzf 给任何列表加上交互式模糊搜索
cat bat 语法高亮,自带行号和 Git 变更标记

fd ------ 你不需要再记 find 的语法了

find 的语法是出了名的反人类:

bash 复制代码
# 找一个 .log 文件,用 find 要这样写
find . -name "*.log" -type f

fd 只需要:

bash 复制代码
fd -e log

常用场景:

bash 复制代码
fd "config"               # 模糊匹配文件名
fd -e yaml                # 按扩展名搜索
fd -t d "src"             # 只找目录
fd -H ".env"              # 包含隐藏文件
fd --changed-within 1d    # 最近一天修改的文件

# 对结果批量执行命令
fd -e log -X rm           # 删除所有 .log 文件

两个细节值得一提:默认自动跳过 .gitignore 里的内容(项目目录下几乎必备);大小写智能匹配,输入小写自动忽略大小写,一旦包含大写则精确匹配。


rg(ripgrep)------ grep,但快得多

ripgrep 的速度优势来自三点:SIMD 字节扫描、无回溯正则引擎、并行目录遍历。加上同样自动忽略 .gitignore,在大型代码库里搜索体感差距非常明显。

常用场景:

bash 复制代码
rg "TODO"              # 递归搜索当前目录
rg -i "error"          # 忽略大小写
rg -t py "import"      # 只搜 Python 文件
rg -g "*.yaml" "key"   # glob 过滤
rg -l "pattern"        # 只列出文件名
rg -A 3 "panic"        # 匹配行 + 后 3 行上下文
rg "old" -r "new"      # 预览替换结果(不修改文件)

grep -r 相比,输出默认带颜色、文件名、行号,直接可读,不需要额外加参数。


fzf ------ 给一切加上交互式搜索

fzf 本身不搜索文件,它做一件事:把任何列表变成可交互的模糊搜索界面

装完之后,三个快捷键立刻改变日常操作:

快捷键 功能
Ctrl+R 交互式搜索命令历史
Ctrl+T 模糊搜索文件,插入路径到当前命令行
Option+C 模糊搜索目录并直接 cd

单独使用也很直接:

bash 复制代码
vim $(fzf)                                            # 搜索文件后用编辑器打开
git branch | fzf | xargs git checkout                # 交互式切换分支
git log --oneline | fzf --preview 'git show {1}'     # 浏览提交历史

推荐加到 ~/.zshrc,让 fd 作为 fzf 的文件来源(速度更快,自动忽略 .gitignore):

bash 复制代码
export FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude .git'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border'

bat ------ cat 终于好看了

batcat 的替代品,默认输出语法高亮、行号、Git 变更标记。

bash 复制代码
bat file.rs              # 查看文件
bat -n file              # 只显示行号
bat -r 10:20 file        # 只看第 10-20 行
bat -H 15 file           # 高亮第 15 行
bat --plain file         # 纯输出,适合管道

两个推荐配置:

bash 复制代码
# 替换 man 页,终于有高亮了
export MANPAGER="sh -c 'col -bx | bat -l man -p'"

# 别名
alias cat='bat --paging=never'
alias less='bat'

组合起来才是精髓

四个工具单独用都不错,但组合起来才是真正的效率跃升。

交互式代码内容搜索

用 rg 搜索内容,用 fzf 交互筛选,用 bat 实时预览文件:

bash 复制代码
rg -n "" | fzf --delimiter=: \
  --preview 'bat --highlight-line {2} --color=always {1}'

效果:在所有文件里搜索任意内容,实时预览匹配上下文,选中直接定位。

fd + fzf:交互式文件选择

bash 复制代码
fd -t f | fzf --preview 'bat --color=always {}'

比直接跑 fzf 快,且自动排除 .gitnode_modules 等目录。

批量替换工作流

bash 复制代码
# 搜索包含关键词的文件 → 交互确认 → 批量替换
rg -l "old_func" | fzf | xargs sed -i '' 's/old_func/new_func/g'

先用 fzf 确认要改哪些文件,再执行替换,避免误操作。


安装

bash 复制代码
brew install fd ripgrep fzf bat
$(brew --prefix)/opt/fzf/install   # 安装 fzf shell 快捷键
相关推荐
升鲜宝供应链及收银系统源代码服务11 小时前
升鲜宝AI助手项目源码集成开发步骤(一)---升鲜宝生鲜配送供应链管理系统源代码服务
人工智能·生鲜配送系统·生鲜物流线路规划·生鲜电商订单系统·生鲜供应链系统·生鲜系统架构设计·生鲜配送ai功能集成
yjcode78911 小时前
探索游戏充值新纪元:友价源码技术革新之旅
大数据·人工智能·游戏·游戏交易
冬奇Lab11 小时前
Agent 系列(11):A2A 协议——Agent 与 Agent 如何协作
人工智能·agent
snow@li11 小时前
AI:理解 大数据、算法、算力、电力、生成式AI、token 之间的关系
大数据·人工智能·算法
冬奇Lab11 小时前
每日一个开源项目(第120篇):SkillLens - 微软出品,照亮 AI Agent 技能生命周期的“显微镜”
人工智能·开源·资讯
qingyulee11 小时前
深度学习介绍、pytorch框架
人工智能·深度学习
oort12311 小时前
VLStream:全开源决策式AI视频平台,赋能企业构建自主可控、降本增效的智能视觉应用介绍
大数据·开发语言·人工智能·开源·音视频·数据库架构
Agent_Sea11 小时前
IDC/Omdia/Gartner AI平台排名可信度穿透判断:第三方数据该怎么读
人工智能·大模型·ai平台
视***间11 小时前
算力筑基,智领人形机器人新时代 —— 英伟达 × 宇树科技携手推进具身智能,视程空间基于 NVIDIA 全栈算力产品助力机器人产业落地
人工智能·机器人·nvidia·机器狗·gpt-oss·视程空间·宇树机器人
EAIReport12 小时前
Spring AI 详解:Java 开发者快速落地 AI 应用
java·人工智能·spring