简介
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 集成