fzf 命令

fzf 是一个用 Go 语言编写的通用命令行模糊查找器,它能够快速筛选和定位文件、目录、命令历史、进程等内容,大幅提升命令行工作效率。当与其他工具结合使用时,能发挥出更强大的功能。

安装方法

macOS

bash
# 使用 Homebrew 安装
brew install fzf

# 安装 shell 扩展(提供快捷键和自动补全功能)
/usr/local/opt/fzf/install

Linux

bash
# Debian/Ubuntu 系统
sudo apt install fzf

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

Windows

  • 使用 Chocolatey: choco install fzf
  • 使用 Scoop: scoop install fzf

基本使用

简单搜索文件

bash
fzf

管道输入

bash
# 搜索历史命令
history | fzf

# 搜索进程
ps aux | fzf

# 搜索 git 仓库中的文件
git ls-files | fzf

结合其他命令

bash
# 搜索并打开文件
vim $(fzf)

# 搜索并删除文件
rm -f $(fzf)

快捷键

安装 shell 扩展后,fzf 提供了以下默认快捷键:

快捷键 功能
Ctrl-T 在当前目录搜索文件/目录并插入
Ctrl-R 搜索命令历史并执行
Alt-C 搜索目录并切换到该目录

在 fzf 界面中使用的快捷键:

快捷键 功能
Enter 选择并确认
Ctrl-J/Ctrl-K 上下移动
Ctrl-D 向下翻页
Ctrl-U 向上翻页
Ctrl-C 取消
Tab 多选(可以使用 Shift-Tab 取消选择)

配置选项

可以通过环境变量来配置 fzf 的行为:

基本配置

bash
# 默认选项
export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --border"

# 文件搜索命令
export FZF_DEFAULT_COMMAND="fd --type f --hidden --follow"

# Ctrl-T 快捷键的配置
export FZF_CTRL_T_OPTS="--preview 'cat {}'"

# Ctrl-R 快捷键的配置
export FZF_CTRL_R_OPTS="--sort"

# Alt-C 快捷键的配置
export FZF_ALT_C_OPTS="--preview 'ls -la {}'"

高级配置 - 多列过滤

bash
# 添加列匹配快捷键
export FZF_DEFAULT_OPTS="--bind 'alt-1:change-query(:1:)+clear-query' \
                         --bind 'alt-2:change-query(:2:)+clear-query' \
                         --bind 'alt-0:change-query()+clear-query'"

高级功能

多条件组合筛选

结合 fzf 的扩展搜索语法,可以实现更精确的筛选:

  • ^abc - 匹配以 abc 开头的条目
  • `abc— title: fzf 命令 description: fzf 命令是一个用于在命令行中进行模糊搜索的工具,支持多种输入方式,如文件、目录、进程等。它可以帮助用户快速找到需要的内容,提高工作效率。 keywords:
    • fzf
    • 命令行工具
    • 模糊搜索
    • 文件搜索
    • 目录搜索
    • 进程搜索
    • 工作效率

  • 匹配以 abc 结尾的条目
  • !abc - 排除包含 abc 的条目
  • 'abc - 精确匹配 abc

预览功能

bash
# 搜索文件并预览内容
fzf --preview 'cat {}'

# 搜索目录并预览文件列表
fzf --preview 'ls -la {}' --height 60%

使用示例

1. 搜索并编辑文件

bash
# 使用 vim 打开搜索到的文件
vim $(fzf)

# 使用 neovim 打开多个文件
nvim $(fzf -m)

2. 搜索历史命令

bash
# 使用 Ctrl-R 快捷键搜索历史命令
# 或者直接使用管道
history | fzf

3. 搜索并切换目录

bash
# 使用 Alt-C 快捷键搜索目录
# 或者直接使用
cd $(find . -type d | fzf)

4. 搜索并杀死进程

bash
kill -9 $(ps aux | fzf | awk '{print $2}')

5. 搜索 git 相关内容

bash
# 搜索 git 历史提交
git log --oneline | fzf

# 搜索 git 分支
git branch | fzf

集成使用

与 Vim 集成

在 Vim 中可以使用 fzf.vim 插件来集成 fzf 功能:

vim
" 安装 fzf.vim 插件(使用 vim-plug)
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'

" 基本映射
nnoremap <C-p> :Files<CR>       " 搜索文件
nnoremap <C-g> :GFiles<CR>      " 搜索 git 文件
nnoremap <C-b> :Buffers<CR>     " 搜索缓冲区
nnoremap <C-f> :Rg<CR>          " 使用 ripgrep 搜索内容

与 i3 窗口管理器集成

bash
# 在 ~/.config/i3/config 中添加快捷键绑定
# fzf 文件选择器,按 Super+f 启动
bindsym $mod+f exec --no-startup-id "alacritty -e fzf"

# 搜索并切换工作区
bindsym $mod+Shift+f exec --no-startup-id "i3-msg workspace $(i3-msg -t get_workspaces | jq -r '.[].name' | fzf)"

特点

  • 交互式搜索:实时显示搜索结果,支持模糊匹配
  • 高性能:使用 Go 语言编写,搜索速度快
  • 管道友好:可以与任何命令行工具结合使用
  • 高度可配置:通过环境变量和命令行参数自定义行为
  • 跨平台:支持 macOS、Linux、Windows
  • 丰富的快捷键:提供常用操作的快捷键绑定

fzf 是命令行爱好者的必备工具之一,通过合理的配置和使用,可以极大地提升日常工作效率。

最后更新:2026-02-05