81,380· 2,802 forks· Go· MIT开发工具

fzf - 命令列模糊查詢神器

junegunn/fzf

Go 實現的通用命令列模糊查詢器,支援檔案搜尋/歷史命令/程序選擇等場景,整合 Vim/Zsh/Bash 等主流 Shell

成熟度維護活躍,最近提交 1 天前,open issues 325 個,11 年老牌專案

项目体检

部署 · 单二进制文件直接运行,Docker 镜像用于测试(包含 Ruby/Go/Tmux 等环境),无默认端口

成本 · 无外部依赖,开箱即用,可选集成 ripgrep/fd 增强搜索能力

技术 · Go 1.23 + tcell 终端库 + fastwalk 文件遍历

许可 · MIT 协议,可自由商用无限制

活跃 · 1 天前刚提交代码,337 贡献者,最新版本 v0.73.1(2026-05-25),高度活跃

解決什麼

傳統終端操作中,查詢歷史命令需要反覆按 Ctrl+R,瀏覽檔案靠 ls 配合肉眼掃描,選擇程序要複製貼上 PID。fzf 通過模糊匹配技術將這些場景統一為互動式篩選介面:輸入關鍵詞即時過濾結果,方向鍵選擇目標,回車確認執行。它本質是一個通用的"管道過濾器",任何輸出列表的命令都能接入 fzf 獲得互動能力,例如 git branch | fzf 視覺化選擇分支,kubectl get pods | fzf 快速定位容器。

為何火

8.1 萬 GitHub stars 源於其極致的實用性:Go 編譯的單二進位制檔案無依賴部署,毫秒級處理百萬條目的效能碾壓傳統工具,開箱整合 Bash/Zsh/Fish/Vim 等主流環境。HN 社群 279 點討論中,開發者稱其為"每天必用的第一批工具",與 oh-my-zsh 和 ripgrep 並列為新機器必裝軟體。其可程式設計性讓使用者能構建自定義工作流,例如 Kubernetes 資源瀏覽、日誌即時搜尋、Git 提交歷史導航,將簡單指令碼升級為富互動終端應用。

核心功能

  • 模糊匹配引擎:支援精確匹配、字首字尾、反向排除等多種語法,智慧排序將最相關結果置頂
  • Shell 整合:Ctrl+T 檔案選擇、Ctrl+R 歷史搜尋、Alt+C 目錄跳轉三大快捷鍵覆蓋高頻場景
  • 預覽視窗:即時顯示檔案內容/命令輸出,支援語法高亮和圖片預覽(需 chafa/imgcat)
  • 事件驅動架構:通過 --bind 繫結按鍵觸發外部命令,實現動態重新整理列表或執行復雜操作
  • 多種顯示模式:全屏/半屏/彈窗三種佈局適配不同終端環境,支援 tmux 整合

安裝

包管理器安裝(推薦):

# macOS/Linux
brew install fzf

# Arch Linux
sudo pacman -S fzf

# Ubuntu 19.10+
sudo apt install fzf

啟用 Shell 整合(必須手動執行):

# 安裝後執行
$(brew --prefix)/opt/fzf/install  # Homebrew
~/.fzf/install                     # Git 安裝

單二進位制部署:從 GitHub Releases 下載對應平臺檔案,解壓後放入 PATH 即可使用基礎功能,但需手動配置 Shell 指令碼才能啟用快捷鍵。

適合誰

  • 終端重度使用者:需要頻繁查詢檔案、切換目錄、檢索歷史命令的開發者
  • DevOps 工程師:管理 Kubernetes 叢集、篩選日誌、選擇服務例項等運維場景
  • Vim/Neovim 使用者:通過 fzf.vim 外掛實現檔案/Buffer/Tag 快速跳轉
  • 指令碼開發者:為 Shell 指令碼新增互動式選單,例如部署工具的環境選擇、配置切換

中文使用者注意:完全本地執行無需梯子,中文路徑和檔名支援良好,但預覽視窗的語法高亮需額外安裝 bat 工具。

社群評價

HN 討論熱度極高,使用者普遍將其列為"新機器必裝工具"。正面觀點集中在實用性:有人分享每天用它瀏覽 Kubernetes 資源,避免複製貼上 Pod 名稱;Vim 使用者強調 fzf.vim 外掛的不可替代性。爭議點在於 oh-my-zsh 的必要性:有開發者質疑其複雜度,認為傳統 ksh 配合 200 個自定義 alias 足夠,但支持者反駁稱 oh-my-zsh 提供開箱即用的主題和外掛生態,fzf 的 Shell 整合正是受益於這類工具鏈。技術派推崇其可指令碼化特性,例如管道輸出到 fzf 再對選中項執行 kubectl describe,將命令列操作提升到 GUI 級別的互動體驗。

選型對比

vs 傳統工具(Ctrl+R/Tab 補全):

  • fzf 提供即時預覽和多列顯示,傳統方式只能逐條瀏覽
  • 支援模糊匹配和正則,Tab 補全需精確字首
  • 取捨:fzf 需學習快捷鍵,傳統方式零配置

vs 商業 IDE 的檔案搜尋:

  • fzf 在終端內操作無需切換視窗,IDE 搜尋功能更豐富(重構、呼叫鏈)
  • fzf 可整合任意命令輸出,IDE 限定專案檔案
  • 取捨:fzf 適合快速定位,IDE 適合深度分析

vs 同類工具(skim/peco):

  • fzf 效能最優且生態最完善(Vim 外掛、Shell 整合)
  • skim 用 Rust 實現但社群活躍度低
  • 取捨:fzf 是事實標準,其他工具缺乏維護

已知坑

  1. Shell 整合需手動安裝:包管理器只安裝二進位制,快捷鍵需執行 install 指令碼,新手易遺漏
  2. 預覽功能依賴外部工具:語法高亮需 bat,圖片預覽需 chafa,純淨系統功能受限
  3. Git 倉庫效能問題:預設遍歷所有檔案,大型 monorepo 需配合 fd 或 ripgrep 並設定 .gitignore 過濾
  4. Tmux 彈窗模式相容性:舊版 tmux(<3.2) 的 --popup 模式可能渲染異常,需升級或改用 --height 模式
  5. Windows 支援有限:雖有二進位制但 Shell 整合指令碼主要面向 Unix,WSL 環境體驗更佳

安装方式:brew/apt/pacman 或单二进制文件