$ terminals _

fzf

命令行模糊查找器,支持文件、历史记录、进程等的快速模糊搜索

🌐 官网 GitHub brew install fzf

简介

fzf 是一个通用的命令行模糊查找器,可以用于搜索任何列表数据:文件、命令历史、进程、Git 分支等。它速度极快,交互体验流畅,是终端效率工具的必备神器。

安装

# macOS
brew install fzf

# Ubuntu/Debian
sudo apt install fzf

# 从源码安装
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

核心功能

  • 文件搜索: 直接运行 fzf 即可模糊搜索当前目录下所有文件
  • 历史搜索: Ctrl+R 模糊搜索命令历史,比默认的反向搜索好用得多
  • 目录跳转: Alt+C 模糊搜索并进入子目录
  • 自动补全: **<Tab> 触发路径模糊补全

配置推荐

# 在 .zshrc 或 .bashrc 中添加
export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border --preview "bat --color=always {}"'
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"

典型场景

场景一:Ctrl+R 升级版历史搜索

安装并初始化 fzf 后,按 Ctrl+R 即可模糊搜索命令历史,支持多关键字:

# 搜索所有含 "docker run" 的历史命令
# 在 fzf 界面中输入:docker run
# 结果实时过滤,按 Enter 直接执行

# 在 .zshrc 中美化历史搜索
export FZF_CTRL_R_OPTS="
  --preview 'echo {}' --preview-window up:3:hidden:wrap
  --bind 'ctrl-/:toggle-preview'
  --bind 'ctrl-y:execute-silent(echo -n {2..} | pbcopy)+abort'
  --color header:italic
  --header 'Press CTRL-Y to copy command to clipboard'"

场景二:交互式 kill 进程

不需要先 ps aux | grep 再手动复制 PID:

# 模糊搜索进程名,选中后直接 kill
fzf_kill() {
  local pid
  pid=$(ps aux | fzf --header='Select process to kill' | awk '{print $2}')
  [ -n "$pid" ] && kill -9 "$pid"
}

# 加到 .zshrc 后直接调用
fzf_kill

场景三:交互式 git checkout 分支

# 模糊搜索并切换分支
alias gco='git branch | fzf | xargs git checkout'

# 或更完善版本(含远程分支 + 预览最近提交)
alias gbr='git branch -a | fzf \
  --preview "git log --oneline --graph --color=always \
    \$(echo {} | sed s/remotes\\/origin\\/// | tr -d \"* \")" \
  | sed "s/remotes\/origin\///" | tr -d "* " | xargs git checkout'

场景四:项目快速跳转(搭配 fd + zoxide)

# 在所有 git 仓库中模糊搜索并跳转
alias proj='cd $(fd -t d -H "^\.git$" ~ --max-depth 5 \
  | xargs -I{} dirname {} \
  | fzf --preview "eza --tree --level=1 {}")'

推荐搭配

  • ripgrep — 配合 fzf 实现代码级搜索
  • bat — 在 fzf 预览窗口中高亮显示文件内容
  • fd — 替代 find,作为 fzf 的默认搜索后端
  • zoxide — 智能目录跳转,可与 fzf 集成