fzf 终端模糊搜索
一句话概述:fzf 是终端模糊查找工具,能快速搜索文件、历史命令、进程等,输入几个字母就找到目标,大幅提升命令行效率。
核心知识点
| 概念 | 白话解释 |
|---|
| fzf | 模糊搜索器 = 终端里的搜索框 |
| Fuzzy | 模糊匹配 = 不用输完整,输几个字母就能匹配 |
| Preview | 预览 = 搜索时实时预览文件内容 |
| Keybinding | 快捷键 = Ctrl+R/Ctrl+T/Alt+C |
安装配置
# Linux
sudo apt install fzf # Ubuntu/Debian
# macOS
brew install fzf # Homebrew
$(brew --prefix)/opt/fzf/install # 安装快捷键绑定
# 通用安装
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install # 安装(会修改 .bashrc/.zshrc)
# 验证
fzf --version # 查看版本
基本使用
# 交互式文件搜索
fzf # 搜索当前目录所有文件
# 输入字母开始模糊匹配 → Enter 选择 → 输出文件路径
# 搜索并打开文件
vim $(fzf) # 搜索文件用 vim 打开
code $(fzf) # 搜索文件用 VS Code 打开
cat $(fzf) # 搜索文件并查看内容
# 管道模式(任何列表都能搜索)
ls | fzf # 搜索 ls 结果
find . -name "*.py" | fzf # 搜索 Python 文件
grep -rl "T2D" . | fzf # 搜索包含 T2D 的文件
# 带预览
fzf --preview 'cat {}' # 搜索时预览文件内容
fzf --preview 'head -50 {}' # 预览前50行
Shell 快捷键集成
# 安装后自动绑定的快捷键(Bash/Zsh)
# Ctrl+R → 搜索命令历史
# 按 Ctrl+R → 输入关键词 → 模糊匹配历史命令 → Enter 执行
# Ctrl+T → 搜索文件并粘贴路径
# 输入 vim → 按 Ctrl+T → 搜索文件 → 路径自动填入
# Alt+C → 搜索目录并 cd 进入
# 按 Alt+C → 输入目录名 → Enter 直接跳转
高级配置
# 在 .bashrc 或 .zshrc 中添加
# 默认选项
export FZF_DEFAULT_OPTS='
--height 40% # 占屏幕40%高度
--layout=reverse # 搜索框在上方
--border # 显示边框
--preview "head -100 {}" # 默认预览
'
# 使用 fd 替代 find(更快,遵守 .gitignore)
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" # Ctrl+T 也用 fd
export FZF_ALT_C_COMMAND='fd --type d --hidden --follow --exclude .git'
# 历史搜索优化
export FZF_CTRL_R_OPTS='
--preview "echo {}" # 预览命令
--preview-window up:3:hidden:wrap # 预览窗口设置
--bind "ctrl-/:toggle-preview" # 切换预览
'
实用组合
# 快速 cd 到项目目录
cd $(find ~/projects -maxdepth 2 -type d | fzf) # 搜索项目目录
# 搜索并杀死进程
kill -9 $(ps aux | fzf | awk '{print $2}') # 模糊搜索进程
# 搜索 conda 环境并激活
conda activate $(conda env list | grep -v "^#" | awk '{print $1}' | fzf)
# Git 分支切换
git checkout $(git branch | fzf) # 模糊搜索分支
# Git 日志浏览
git log --oneline | fzf --preview 'git show {1}' # 搜索 commit
# 搜索安装的包
pip list | fzf # 搜索 Python 包
conda list | fzf # 搜索 conda 包
# 多选模式
fzf -m # Tab 多选,Enter 确认
# 例:删除多个文件
rm $(fzf -m) # 选择多个文件删除
# 搜索 FASTQ 文件
find /data -name "*.fastq.gz" | fzf --preview 'zcat {} | head -8' # 预览 FASTQ
常见报错
| 报错 | 原因 | 解决 |
|---|
command not found: fzf | 未安装 | 安装 fzf |
| 快捷键不生效 | 未安装 keybinding | 运行 ~/.fzf/install 并重启终端 |
| 搜索太慢 | 目录太大 | 安装 fd 替代默认的 find |
| Alt+C 不生效 | 终端不支持 Alt 键 | 换终端或改键绑定 |
速查表
# 安装
sudo apt install fzf # Linux
brew install fzf && $(brew --prefix)/opt/fzf/install # macOS
# 基本用法
fzf # 交互式搜索
command | fzf # 管道模式
fzf -m # 多选模式
fzf --preview 'cat {}' # 带预览
# Shell 快捷键
# Ctrl+R → 搜索命令历史
# Ctrl+T → 搜索文件路径
# Alt+C → 搜索目录并跳转
# 搜索语法
# abc → 模糊匹配
# 'abc → 精确匹配(加单引号前缀)
# ^abc → 以 abc 开头
# abc$ → 以 abc 结尾
# !abc → 不包含 abc
# .py$ | .sh$ → 组合条件
# 常用组合
# vim $(fzf) → 搜索并编辑
# cd $(find . -type d | fzf) → 搜索并跳转
# kill $(ps aux | fzf | awk '{print $2}') → 搜索并杀进程