fzf 是 GitHub 上累積 83,428 顆星標與 4,648 次 fork 的命令列模糊搜尋工具,以 Go 語言撰寫、採用 MIT 授權,由開發者 Junegunn Choi 於 2013 年 10 月建立。官方將它定位為「通用命令列模糊搜尋器與互動式終端工具組」,能在毫秒內處理數百萬筆候選項目,並內建 Bash、Zsh、Fish、Nushell、Vim 與 Neovim 的整合。專案在 2026 年 9 月 12 日發布 0.74.4 版本,累計提交數達 3,746 次,貢獻者超過三百人,最新版本序列的效能最佳化與 Vim 外掛重構,構成此次值得關注的技術變化。

fzf 是以 Go 撰寫的命令列模糊搜尋工具,可從標準輸入或檔案系統取得候選清單,讓使用者在終端機中即時篩選並輸出選取結果,採 MIT 授權。
fzf 是什麼?
它是一個通用文字過濾器:從標準輸入讀取候選清單、把選取項目寫到標準輸出,因此能嵌進任何 Shell 指令與腳本流程,而不限於檔案搜尋用途。
該專案的運作模型極為單純。使用者把任何來源的清單透過管線送入 fzf,畫面便會出現互動介面,輸入關鍵字後即時縮小候選範圍,按下確認鍵後把選取結果輸出。README 示範的最基本用法是把檔案清單交由它篩選,若沒有提供管線輸入,程式會自行走訪當前目錄下的檔案。它同時支援多選模式,可一次標記多個項目後輸出,也能直接接管為另一個程序,例如在選取檔案之後立刻以編輯器開啟。
這種「只負責過濾、不假設用途」的設計,讓它超出單純的檔案搜尋範疇。官方文件列出的應用包含歷史指令檢索、分支切換、程序管理與資料集瀏覽,社群亦在專案的 Wiki 與進階範例文件中累積大量組合用法。README 把四個特性列為核心:以單一二進位檔散布的便攜性、毫秒級處理數百萬筆項目的速度、可撰寫自訂終端介面的可程式化架構,以及對常見 Shell 與編輯器的現成整合。
fzf 的搜尋語法有什麼特點?
它預設採用擴展搜尋模式,以空格分隔多個詞彙,支援模糊匹配、精確匹配、前綴與後綴匹配、反向排除,並可用直線符號表達「或」的關係。
搜尋語法沿用一般模糊搜尋器的直覺,卻提供了精細的修飾方式。直接輸入的詞彙會以模糊匹配處理,只要字元依序出現即可命中;在詞彙前後加上單引號則切換為精確匹配或邊界匹配,用來排除干擾。前綴符號要求項目以指定字串開頭,後綴符號要求結尾相符,驚嘆號則表示排除,例如要求結果不含某個字串。使用者若不需要模糊匹配,可以改用精確模式啟動,此時單引號的語義會反轉為解除精確限制。
多重條件以空格分隔、彼此以「且」的關係成立,而單一直線符號則表達「或」的邏輯。官方示範以一個查詢同時要求項目以特定字串開頭、並以三種之一結尾,說明這套語法足以描述相當複雜的篩選意圖。互動過程中,畫面會即時標示命中字元的位置,並顯示符合條件的項目數量,讓使用者掌握當前查詢的收斂程度。這套語法的價值在於把「先用工具縮小範圍、再逐層細分」的習慣,壓縮成一次輸入即可完成的操作。
fzf 的顯示模式與整合方式有哪些?
它預設以全螢幕執行,另提供佔畫面上方指定比例的 –height 模式,以及需 tmux 3.3 以上或 Zellij 0.44 以上的 –popup 浮動視窗模式。
顯示模式影響使用體驗的連貫性。全螢幕模式適合大規模清單的瀏覽,而高度模式會在游標下方以指定行數開啟,讓使用者仍能看見原本的終端畫面,官方建議搭配反向排版與邊框以取得較佳視覺效果。高度值可以百分比、負值或加上波浪符號的彈性上限表示,後者會依實際候選數量決定開啟的行數。浮動視窗模式則把介面交給終端多工器繪製,適用於 tmux 或 Zellij 環境,在不支援的環境中該選項會被靜默忽略,官方另提供相容腳本供舊版 tmux 使用。
外觀與行為都能透過大量選項調整。官方提供三組風格預設值,並允許逐項設定邊框、內距、標籤與預覽視窗位置;由於選項數量龐大,專案建議查閱手冊取得完整清單。Shell 整合方面,載入對應的初始化指令後即可取得三組常用鍵位,分別用於插入選取的檔案路徑、檢索歷史指令與切換目錄,並可透過環境變數停用個別鍵位或改寫其資料來源。Vim 與 Neovim 使用者則透過外掛取得函式庫與指令集,或以 Lua 版本的外掛替代。這些整合共享同一套核心,因此選項與行為在不同環境中保持一致。
fzf 的 0.74 系列版本帶來哪些變化?
0.74 系列以效能為主軸:短查詢加速最多 2.4 倍、非 ASCII 查詢加速達 12 倍,並修正多項終端渲染與輸入解析問題。
效能最佳化是這一系列最集中的方向。官方變更紀錄記載,短查詢因需掃描最大候選集合而成為效能瓶頸,單一字元查詢在最佳化後加速至 2.4 倍,兩個字元的查詢亦有 1.4 倍提升,同時改進了結果排序流程。針對非 ASCII 輸入的另一輪最佳化則讓 ASCII 查詢加速達 16 倍、非 ASCII 查詢加速達 12 倍,並降低中日韓輸入的記憶體用量。這些數字反映的是搜尋演算法與記憶體管理的調整,而非介面層的改動。
輸入解析與終端相容性同樣獲得修正。舊版本在終端機延遲回覆啟動查詢時,會把殘留的控制序列誤判為使用者輸入並洩漏到查詢字串中,這個問題已在 0.74.4 修復;另有針對 FreeBSD 虛擬終端等從不回應控制序列的環境,修正啟動時阻塞並吞掉按鍵的情況。渲染層面則導入同步更新模式以降低畫面閃爍,並減少重複的色彩序列輸出。Vim 外掛的改動較具結構性:外掛不再阻塞編輯器,即時預覽在開啟期間仍可運作,同步執行與非同步執行的回傳值因此有所不同,開發者需以回呼取得結果。外掛亦新增在浮動面板中開啟的預設行為,需要 tmux 3.7 以上或 Zellij 0.44 以上的版本。

如何開始使用 fzf?
可用 Homebrew、各 Linux 發行版套件庫、mise 或 Windows 的 Chocolatey 與 Winget,也可直接下載官方二進位檔。
安裝路徑依作業系統與套件習慣而異。macOS 與 Linux 使用者可透過 Homebrew 取得,主流 Linux 發行版幾乎都已在官方套件庫收錄,Windows 方面則有 Chocolatey、Scoop、Winget 與 MSYS2 四種管道。偏好版本控管工具者可使用 mise 指定版本,也能以 Git 複製儲存庫後執行內附的安裝腳本,該腳本會修改 Shell 設定檔並設定路徑。對於無法使用套件管理員的環境,官方每個版本都提供對應平台的可執行檔供直接下載。
首次設定之後,關鍵步驟是載入 Shell 整合。Bash、Zsh、Fish 與 Nushell 各有對應的一行指令,載入後即可取得鍵位與模糊補全功能;Nushell 因不支援管線載入,需由安裝腳本在自動載入目錄產生設定檔,或由使用者手動寫入。官方提醒這些選項僅存在於較新版本,舊版本使用者需改為個別載入儲存庫中的腳本檔。停用個別鍵位的做法是把對應的環境變數設為空字串,但必須在載入整合之前設定,載入後再修改不會生效。儲存庫根目錄的 bin 目錄另提供與終端多工器搭配的相容腳本。

fzf 的統計數據與授權條件為何?
該專案累積 83,428 顆星標、4,648 次 fork 與 451 名關注者,以 Go 撰寫並採 MIT 授權,建立於 2013 年 10 月,著作權標示至 2026 年。
授權方面,該專案採用 MIT 授權,允許商業使用、修改、合併、散布與再授權,僅要求保留著作權聲明與授權條文,屬於限制最少的開源授權類型之一。這項條件解釋了它被廣泛嵌入其他工具與發行版套件庫的原因。專案由單一主要維護者長期主導,同時接受社群貢獻,累計超過三百名貢獻者;官方亦透過贊助方案支撐維護工作,README 末段列出贊助者名單與周邊商品連結。就治理結構而言,它屬於典型的個人主導式開源專案,更新節奏穩定,指令介面則維持向後相容的保守策略。
出處連結有哪些?
本文資訊整理自 junegunn/fzf 的 GitHub 儲存庫、官方 README、變更紀錄與發布頁面,數據為 2026 年 10 月 8 日查詢結果。
- GitHub 儲存庫:https://github.com/junegunn/fzf
- 官方網站與文件:https://junegunn.github.io/fzf/
- 版本發布頁:https://github.com/junegunn/fzf/releases
- 進階用法範例:https://github.com/junegunn/fzf/blob/master/ADVANCED.md
- 社群範例集:https://github.com/junegunn/fzf/wiki/examples
總結:fzf 適合什麼樣的開發者?
它適合長時間在終端機與編輯器工作、需要頻繁檢索檔案或指令的開發者與系統管理者;若工作流程以圖形介面為主,或需求集中於檔案總管的視覺化操作,其效益相對有限。
該專案的價值在於以極低的整合成本,改善命令列操作中最常見的中斷點。它不改變既有指令結構,只是插入一層互動過濾,因此導入門檻低、學習曲線平緩;單一二進位檔的散布方式與寬鬆授權,也讓它在各種環境中都能快速部署。對需要長時間在遠端主機或容器內作業的使用者而言,這種不依賴圖形介面的檢索能力尤其實際。
限制則來自它的抽象層級。fzf 只處理文字清單的過濾與選取,不理解語義,也不內建任何領域知識,因此使用體驗高度取決於使用者如何設計輸入來源與後續動作。這意味著效益會隨使用者的腳本能力而異:熟悉 Shell 組合的人能把它擴展成複雜的互動介面,而僅使用預設鍵位的人則只會接觸到其中一小部分功能。對於以圖形化檔案管理為主的工作流程,它難以取代既有工具;但對於以鍵盤為核心的操作習慣,它已成為多數發行版與開發環境的標準配置。