fzy 是一個輕量的命令列模糊搜尋(fuzzy finder)工具,設計簡潔,能快速從大量文字清單中互動式地選取一個項目。它特別適合搭配其他指令使用,讓選擇檔案、切換分支、搜尋歷史紀錄等操作變得更直覺。
安裝方式
使用 zplug 安裝(zsh 環境)
1
2
3
4
5
6
7
8
9
|
zplug "jhawthorn/fzy", \
as:command, \
rename-to:fzy, \
hook-build:"
{
make
sudo make install
} &>/dev/null
"
|
手動安裝(Linux/macOS)
1
2
3
4
|
git clone https://github.com/jhawthorn/fzy.git
cd fzy
make
sudo make install
|
macOS Homebrew
基本使用方式
fzy 從 stdin 讀取清單,讓使用者以模糊匹配互動式選取,最後將結果輸出到 stdout:
1
2
3
4
5
6
7
8
|
# 選擇一個檔案並開啟
find . -type f | fzy | xargs vim
# 從目前目錄選擇 Python 檔案
find . -name "*.py" | fzy
# 從 ls 結果中選取
ls | fzy
|
常見整合場景
搭配 git 切換分支
1
2
|
# 互動式選擇分支後切換
git branch | fzy | xargs git checkout
|
搭配命令歷史搜尋
在 ~/.zshrc 或 ~/.bashrc 中加入:
1
2
3
4
5
6
7
8
9
|
# Ctrl+R 模糊搜尋歷史指令
fzy-history() {
selected=$(fc -ln 1 | fzy)
BUFFER="$selected"
CURSOR=$#BUFFER
zle redisplay
}
zle -N fzy-history
bindkey '^R' fzy-history
|
搭配 cd 快速切換目錄
1
2
|
# 互動式選擇並進入目錄
cd $(find . -type d | fzy)
|
快速殺掉程序
1
|
kill -9 $(ps aux | fzy | awk '{print $2}')
|
fzy 與 fzf 的差異
| 特性 |
fzy |
fzf |
| 效能 |
極快,C 語言實作 |
快,Go 語言實作 |
| 多選 |
不支援 |
支援(--multi / Tab 鍵) |
| Preview 功能 |
無 |
有(--preview) |
| Shell 整合 |
需手動設定 |
提供完整 shell plugin |
| 排序演算法 |
優先最短路徑 |
更靈活的 scoring |
| 安裝大小 |
非常小 |
稍大 |
fzy 的優點在於排序演算法更精準,對於較短的搜尋詞能更準確地定位目標。fzf 則功能更豐富,適合需要多選或 preview 的場景。
參考資料