--- title: fzf:模糊搜尋 tags: [Tool, CLI, Linux, MacOS, Search] --- # fzf:模糊搜尋 [文章更新時間: 2026-01-23 13:34]  ## 簡介 **fzf** 是一個通用的交互式命令行過濾工具。它的本質是 **"Filter"**:它從標準輸入(stdin)讀取清單,讓你在終端機介面進行模糊搜尋,最後將選中的結果輸出到標準輸出(stdout)。它不依賴複雜的資料庫,卻能以極高的效率處理海量字串,是現代開發者提升 Terminal 工作流的核心元件。 --- ## 優點 * **零依賴且可攜性高**:以 Go 語言開發,編譯後僅一個執行檔,部署極其簡單。 * **效能卓越**:即使處理上百萬行資料,搜尋反應依然保持在毫秒級。 * **佈局靈活性**:支援全螢幕、下方彈窗(Horizontal/Vertical Split),甚至整合在 Vim 視窗內。 * **豐富的搜尋語法**:支援精確匹配、反向匹配、字首/字尾匹配。 * **生態系強大**:擁有完善的 Shell 整合(Bash, Zsh, Fish)以及 Vim/Neovim 插件支援。 --- ## 安裝步驟 官方強烈建議透過 Git 安裝,因為這能確保你獲得最新的 Shell 腳本整合(包含快捷鍵與自動補全): ### 通用 Git 安裝法 (Linux/macOS) ```bash git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf ~/.fzf/install ``` *在安裝過程中,請對所有提問回答 `y`(包含關鍵字補全與快捷鍵綁定)。* ### 套件管理員安裝 * **macOS (Homebrew)**: `brew install fzf` * **Linux (Ubuntu)**: `sudo apt install fzf` * **Linux (Arch)**: `sudo pacman -S fzf` --- ## 操作步驟:核心三劍客與模糊補全 安裝官方腳本後,你將獲得三大核心快捷鍵: 1. **`CTRL-T` (Files)**:搜尋當前目錄下的檔案路徑,選中後直接填入指令列。 2. **`CTRL-R` (History)**:革命性的歷史紀錄搜尋,輸入關鍵字即可找回曾下過的複雜指令。 3. **`ALT-C` (CD)**:搜尋子目錄,選中後直接切換(cd)進去。 ### 獨門絕技:模糊自動補全 (Fuzzy Completion) 這是官方文件中最酷的功能。在支援的指令後輸入 `**` 再按 `TAB`: * `cd **<TAB>`:模糊搜尋目錄並進入。 * `vim **<TAB>`:模糊搜尋檔案並開啟。 * `ssh **<TAB>`:從 `/etc/hosts` 或已知主機中搜尋並連線。 * `export **<TAB>`:搜尋環境變數。 --- ## 使用情境介紹 ### 情境 A:優雅地處理 Git Log 傳統的 `git log --oneline` 很難閱讀。結合 fzf,你可以直接在 commit 歷史中穿梭: ```bash git log --oneline --color=always | fzf --ansi --no-sort --reverse --multi --preview 'git show --color=always {1}' ``` ### 情境 B:快速殺掉亂跑的 PID 不再需要手動查找 PID,直接選擇要關閉的程序: ```bash ps -ef | fzf --header='[Kill Process]' --reverse | awk '{print $2}' | xargs kill -9 ``` --- ## 進階用法:搜尋語法與介面客製化 ### 1. 搜尋語法表 fzf 不只是模糊搜尋,它支援精準的操作: | 標記 | 匹配類型 | 範例 | | :--- | :--- | :--- | | `sbtr` | 模糊匹配 | 搜尋包含 s, b, t, r 的項目 | | `'wild` | **精確匹配** | 搜尋包含完整 "wild" 關鍵字的項目 | | `^music` | **字首匹配** | 搜尋以 "music" 開頭的項目 | | `.mp3$` | **字尾匹配** | 搜尋以 ".mp3" 結尾的項目 | | `!fire` | **反向匹配** | 排除包含 "fire" 的項目 | ### 2. 佈局設定 (Environment Variables) 你可以透過設定環境變數來改變 fzf 的預設長相(放入你的 `.zshrc` 或 `.bashrc`): ```bash export FZF_DEFAULT_OPTS=" --layout=reverse --info=inline --height=40% --multi --preview '[[ $(file --mime -b {}) =~ binary ]] && echo {} is a binary file || (bat --style=numbers --color=always {} || cat {}) 2> /dev/null | head -500' --color='fg:#bbbbbb,fg+:#ffffff,bg:#222222,bg+:#333333'" ``` *這段設定會讓 fzf 以「上方顯示、40% 高度、支援多選、且具備檔案預覽」的方式呈現。* --- fzf 是一個極具生命力的工具,它能根據你給予的輸入,演化出無限可能。 **既然我們已經整理好了 fzf,下一步你想看看如何將它深度整合進 Vim,打造一個不需要滑鼠的極速開發環境嗎?**
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.