跳转至

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}')  → 搜索并杀进程