OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  fzf-fuzzy-finder:用于交互式过滤的命令行模糊查找器工具

fzf-fuzzy-finder:用于交互式过滤的命令行模糊查找器工具

 
  optimization ·  2026-02-17 01:44:06 · 3 次点击  · 0 条评论  

名称: fzf-fuzzy-finder
描述: 命令行模糊查找器,用于交互式过滤和选择 - 可与 shell、vim 及其他工具集成。
主页: https://github.com/junegunn/fzf
元数据: {"clawdbot":{"emoji":"🔮","requires":{"bins":["fzf"]},"install":[{"id":"brew","kind":"brew","formula":"fzf","bins":["fzf"],"label":"安装 fzf (brew)"},{"id":"apt","kind":"apt","package":"fzf","bins":["fzf"],"label":"安装 fzf (apt)"}]}}


fzf - 模糊查找器

交互式命令行模糊查找器,具备强大的集成能力。

基本用法

简单过滤

# 将列表通过管道传递给 fzf
ls | fzf

# 选择文件
find . -type f | fzf

# 多选(Tab 选择,Shift+Tab 取消选择)
ls | fzf -m

# 选择时预览文件
ls | fzf --preview 'cat {}'

# 使用 bat 进行语法高亮预览
ls | fzf --preview 'bat --color=always {}'

Shell 集成

# 安装后,添加到 ~/.bashrc 或 ~/.zshrc:
# source /path/to/fzf/shell/completion.bash
# source /path/to/fzf/shell/key-bindings.bash

# 按键绑定:
# Ctrl+R - 命令历史记录
# Ctrl+T - 文件搜索
# Alt+C  - 目录导航

# 在命令行中使用
vim **<TAB>      # 文件补全
cd **<TAB>       # 目录补全
kill -9 **<TAB>  # 进程补全

常用模式

文件选择

# 在 vim 中打开文件
vim $(fzf)

# 带预览的编辑
vim $(fzf --preview 'bat --color=always --line-range :500 {}')

# 选择并复制
fzf | xargs -I {} cp {} /目标路径/

# 删除选中的文件
fzf -m | xargs rm

目录导航

# 切换到选中目录
cd $(find . -type d | fzf)

# 快速导航别名
alias cdf='cd $(find . -type d | fzf)'

# 或使用 Alt+C 按键绑定

Git 集成

# 检出分支
git branch | fzf | xargs git checkout

# 显示提交
git log --oneline | fzf | awk '{print $1}' | xargs git show

# 交互式添加文件
git status -s | fzf -m | awk '{print $2}' | xargs git add

# 模糊 Git 日志浏览器
alias gll='git log --oneline | fzf --preview "git show {1}"'

进程管理

# 终止进程
ps aux | fzf | awk '{print $2}' | xargs kill

# 终止多个进程
ps aux | fzf -m | awk '{print $2}' | xargs kill -9

高级功能

预览窗口

# 右侧预览
fzf --preview 'cat {}'

# 预览位置和大小
fzf --preview 'cat {}' --preview-window=right:50%

# 使用 bat 预览
fzf --preview 'bat --color=always --style=numbers --line-range=:500 {}'

# 使用 Ctrl+/ 切换预览
fzf --preview 'cat {}' --bind 'ctrl-/:toggle-preview'

# 预览目录内容
find . -type d | fzf --preview 'ls -la {}'

自定义按键绑定

# 对选中项执行操作
fzf --bind 'enter:execute(vim {})'

# 多个绑定
fzf --bind 'ctrl-e:execute(vim {})' \
    --bind 'ctrl-o:execute(open {})'

# 按键重新加载
fzf --bind 'ctrl-r:reload(find . -type f)'

# 接受非匹配输入
fzf --print0 --bind 'enter:print-query'

过滤选项

# 不区分大小写(默认)
fzf -i

# 区分大小写
fzf +i

# 精确匹配
fzf -e

# 反向匹配(排除)
fzf --query='!pattern'

# OR 运算符
fzf --query='py$ | js$'  # .py 或 .js 文件

# AND 运算符
fzf --query='test .py'  # 同时包含 'test' 和 '.py'

集成示例

与 ripgrep 结合

# 搜索内容并在 vim 中打开
rg --line-number . | fzf | awk -F: '{print "+"$2, $1}' | xargs vim

# 搜索并预览匹配项
rg --line-number . | fzf --delimiter : \
  --preview 'bat --color=always {1} --highlight-line {2}' \
  --preview-window +{2}-/2

与 fd 结合

# 查找并预览文件
fd --type f | fzf --preview 'bat --color=always {}'

# 查找今天修改的文件
fd --changed-within 1d | fzf --preview 'bat {}'

与 docker 结合

# 选择并进入容器
docker ps | fzf | awk '{print $1}' | xargs -I {} docker exec -it {} bash

# 删除选中的镜像
docker images | fzf -m | awk '{print $3}' | xargs docker rmi

# 查看日志
docker ps | fzf | awk '{print $1}' | xargs docker logs -f

与 kubectl 结合

# 选择 Pod
kubectl get pods | fzf | awk '{print $1}' | xargs kubectl describe pod

# 获取日志
kubectl get pods | fzf | awk '{print $1}' | xargs kubectl logs -f

# 删除 Pod
kubectl get pods | fzf -m | awk '{print $1}' | xargs kubectl delete pod

实用别名

添加到 shell 配置中:

# 模糊文件搜索并用 vim 打开
alias fv='vim $(fzf --preview "bat --color=always --style=numbers {}")'

# 模糊目录切换
alias fcd='cd $(find . -type d | fzf)'

# 模糊 Git 检出
alias gco='git branch | fzf | xargs git checkout'

# 模糊进程终止
alias fkill='ps aux | fzf | awk "{print \$2}" | xargs kill -9'

# 模糊历史搜索(Ctrl+R 已内置)
alias fh='history | fzf | awk "{print \$2}" | xargs -I {} sh -c "{}"'

# 查找并编辑
alias fe='fd --type f | fzf --preview "bat --color=always --style=numbers {}" | xargs -r $EDITOR'

配置

环境变量

# 默认选项
export FZF_DEFAULT_OPTS='
  --height 40%
  --layout=reverse
  --border
  --inline-info
  --preview "bat --style=numbers --color=always --line-range :500 {}"
'

# 使用 fd 替代 find
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'

# 用于 Ctrl+T
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"

# 用于 Alt+C
export FZF_ALT_C_COMMAND='fd --type d --hidden --follow --exclude .git'

配色方案

export FZF_DEFAULT_OPTS='
  --color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8
  --color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc
  --color=marker:#f5e0dc,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8
'

高级工作流

项目文件浏览器

# 带预览的智能文件浏览器
fzf \
  --preview 'bat --color=always --style=numbers --line-range=:500 {}' \
  --preview-window='right:60%:wrap' \
  --bind 'enter:execute(vim {})' \
  --bind 'ctrl-y:execute-silent(echo {} | pbcopy)+abort' \
  --header 'Enter: 编辑 | Ctrl+Y: 复制路径'

多功能搜索

# 在文件中搜索并跳转到行
rg --line-number --no-heading . | \
  fzf --delimiter=: \
      --preview 'bat --color=always --style=numbers --highlight-line {2} {1}' \
      --preview-window='+{2}-/2' \
      --bind 'enter:execute(vim {1} +{2})'

Docker 容器管理器

#!/bin/bash
# docker-fzf.sh
container=$(docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Image}}" | fzf --header-lines=1 | awk '{print $1}')
if [ -n "$container" ]; then
    docker exec -it "$container" bash
fi

技巧

  • 使用 --preview 获取视觉上下文
  • 结合 batrgfd 实现强大工作流
  • 在 fzf 中按 ? 查看按键绑定
  • 使用 Tab 进行多选
  • Ctrl+/ 切换预览(如果已绑定)
  • Ctrl+K / Ctrl+J 导航
  • ' 开始查询进行精确匹配
  • ! 开始进行排除
  • 使用 | 表示 OR,空格表示 AND
  • 设置 FZF_DEFAULT_OPTS 进行持久化配置

性能

# 对于大型文件列表,使用 fd 或 rg
export FZF_DEFAULT_COMMAND='fd --type f'

# 限制深度以加快结果返回
export FZF_DEFAULT_COMMAND='fd --type f --max-depth 5'

# 使用并行预览
fzf --preview 'bat {}' --preview-window 'hidden'

文档

GitHub: https://github.com/junegunn/fzf
Wiki: https://github.com/junegunn/fzf/wiki
示例: https://github.com/junegunn/fzf/wiki/examples

3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor