TopGit
Đánh giá repo GitHub

fzf Fuzzy Finder: Bộ Chọn File & Lệnh Nhanh

FTopGit review image for junegunn/fzf
Review by Topgit.dev for junegunn/fzf, with GitHub repository stats and README context.
Nhận định nhanh

fzf đáng để đưa vào dotfiles ngay khi bạn chán cảnh gõ tab để hoàn thành một đường dẫn dài hoặc cuộn qua lịch sử shell bằng tay. Cài một lần, gắn các phím tắt CTRL-T/CTRL-R/ALT-C, và phần lớn thao tác tìm file, tìm lịch sử của bạn chuyển qua một prompt fuzzy-match duy nhất thay vì ls, cd rồi pipe history qua grep.

Sao
★ 83.6k
Fork
⑂ 5.6k
Người đóng góp
👥 338
Ngôn ngữ
Go
Giấy phép
MIT
Chủ đề
Developer Tools
Cập nhật
Oct 2026
Trang chủ
GitHub

fzf là gì?

fzf là một fuzzy finder dòng lệnh viết bằng Go, đọc một danh sách các mục — file, lịch sử lệnh, tiến trình đang chạy, hay bất cứ thứ gì bạn pipe vào — và cho phép bạn lọc dần chỉ bằng cách gõ vài ký tự khớp gần đúng thay vì gõ đầy đủ tên. fzf chạy như một chương trình terminal tương tác, ghi lựa chọn của bạn ra STDOUT, nên bất kỳ script shell hay phím tắt nào cũng có thể dùng nó như một bộ chọn.

Vấn đề mà fzf giải quyết

Làm việc trong terminal thường gặp tình huống bạn nhớ đại khái thứ mình cần chứ không nhớ chính xác cách viết: một file nằm sâu vài thư mục, một branch git từ sprint trước, một lệnh shell đã gõ cách đây một tiếng. Tab completion là chưa đủ. Nó cần đúng phần đầu, còn `history | grep` cần đúng một đoạn con nằm đúng vị trí. fzf giải quyết bài toán 'nhớ mang máng' này bằng cách khớp các ký tự theo đúng thứ tự ở bất kỳ đâu trong chuỗi, rồi trả dòng bạn chọn ngược lại cho lệnh đang chờ nó.

Tính năng cốt lõi

  • ✓Một binary di động duy nhất — không cần interpreter hay dependency nào khác để chạy.
  • ✓Cú pháp tìm kiếm mở rộng: fuzzy, 'exact, ^prefix, suffix$ và !negated có thể kết hợp trong cùng một query, cùng toán tử OR bằng `|`.
  • ✓Tích hợp shell thêm phím tắt CTRL-T (file/thư mục), CTRL-R (lịch sử lệnh) và ALT-C (cd), cùng fuzzy completion qua `**`, cho Bash, Zsh, Fish và Nushell.
  • ✓Các action `--bind` theo kiểu event-driven (reload, become, transform-header, transform-preview-label) biến một query thành một giao diện terminal nhỏ.
  • ✓Ba chế độ hiển thị: fullscreen, panel `--height` chèn inline, và cửa sổ `--popup` trên tmux 3.3+ hoặc Zellij 0.44+.
  • ✓Các preset style (default, full, minimal) cùng tùy chọn `--color` và `--preview` cho từng thành phần của cửa sổ finder.
  • ✓Plugin Vim/Neovim chính thức (`fzf#install()`) giữ binary đi kèm luôn đồng bộ với plugin manager của bạn.
  • ✓Theo README, fzf xử lý danh sách hàng triệu mục mà không có độ trễ đáng chú ý khi mở cửa sổ tìm kiếm.
Số sao GitHub của repo này thay đổi thế nào theo thời gian. Nguồn: star-history.com.Xem lịch sử sao ↗

Cài đặt fzf

README của fzf liệt kê khá nhiều cách cài đặt. Trên macOS hoặc Linux, `brew install fzf` qua Homebrew là nhanh nhất; `mise use -g fzf@latest` phù hợp nếu bạn đã quản lý version công cụ bằng mise. Người dùng Linux có thể cài qua package manager của distro mình — bảng trong README liệt kê APT, DNF, Pacman, APK, Zypper, XBPS, Portage, Nix, Conda, Spack, pkg, pkgin và pkg_add. Trên Windows, fzf có qua Chocolatey, Scoop, Winget hoặc pacman của MSYS2. Bạn cũng có thể chạy `git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf && ~/.fzf/install`, script này sẽ tự thêm các dòng tích hợp shell giúp bạn, hoặc tải thẳng binary từ trang releases trên GitHub. Dù chọn cách nào, bước tích hợp shell (phím tắt và fuzzy completion) vẫn là một bước riêng — README yêu cầu thêm một dòng eval/source cho từng shell sau khi cài binary.

Cách sử dụng cơ bản

Cách dùng cơ bản là một pipe kiểu Unix: `find * -type f | fzf > selected` lọc danh sách file rồi ghi lựa chọn ra STDOUT. Chạy fzf không có pipe, nó sẽ tự duyệt thư mục hiện tại, nên `vim $(fzf)` mở đúng file bạn vừa fuzzy-select. Bên trong cửa sổ finder, CTRL-J/CTRL-K (hoặc CTRL-N/CTRL-P) di chuyển con trỏ, Enter để chọn, CTRL-C/CTRL-G/ESC để thoát; thêm `-m` để multi-select bằng TAB và Shift-TAB, chuột cũng dùng được để cuộn và click. Hành vi duyệt file mặc định có thể ghi đè qua `$FZF_DEFAULT_COMMAND` hoặc nhóm option `--walker`. Với tên file chứa ký tự đặc biệt, README khuyên dùng `fzf --print0 | xargs -0 -o vim` thay vì nội suy chuỗi thông thường. Ngoài ra còn có `--bind 'enter:become(vim {})'`, thay hẳn process fzf bằng lệnh được chọn thay vì gọi ra một process con.

Các trường hợp sử dụng phổ biến

  • •Checkout một branch git: pipe `git branch` vào fzf rồi chọn thay vì gõ đầy đủ tên branch.
  • •Chạy lại nhanh một lệnh shell cũ bằng CTRL-R thay vì cuộn qua `history`.
  • •Mở file trong Vim bằng `vim $(fzf)` thay vì gõ tab qua một đường dẫn dài.
  • •Kill một tiến trình treo bằng cách fuzzy-match tên nó với `kill -9 **<TAB>` thay vì grep qua `ps aux`.
  • •Dựng một menu terminal tùy chỉnh bằng `--bind` và `--preview` — chọn một container docker hay host ssh từ danh sách tự sinh.

Vì sao developer dùng fzf

  • ✓Dùng được ở mọi nơi có shell — Bash, Zsh, Fish và Nushell đều nhận phím tắt và completion từ cùng một binary.
  • ✓Cú pháp tìm kiếm gộp fuzzy, exact, prefix, suffix và negated trong một query, khỏi cần viết regex riêng.
  • ✓`--bind` biến fzf thành một bộ công cụ UI event-driven nhỏ — preview, header tùy chỉnh, reload mà không rời terminal.
  • ✓Phân phối dưới dạng một binary di động duy nhất, không cần cài runtime hay chuỗi dependency nào trước khi dùng được.
  • ✓CTRL-T, CTRL-R và ALT-C cho bạn tìm file, lịch sử và thư mục ngay trên command line ngay khi tích hợp shell xong.

Hạn chế và đánh đổi

  • △Tích hợp Vim bị tách thành hai plugin riêng (fzf và fzf.vim), nên người dùng Neovim muốn cấu hình theo kiểu Lua-native thường phải cài thêm fzf-lua.
  • △Kết hợp `--bind`, `--preview` và `--style` cùng lúc nhanh chóng trở nên rườm rà — ví dụ preset 'full' ngay trong README đã chuỗi cả chục option.
  • △Tùy chỉnh lệnh riêng cho CTRL-R chưa được hỗ trợ; đặt `FZF_CTRL_R_COMMAND` khác rỗng chỉ in ra một cảnh báo.
  • △Mặc định, tìm file rơi về việc duyệt toàn bộ filesystem — bạn phải tự set `$FZF_DEFAULT_COMMAND` trỏ đến thứ gì đó nhanh hơn như một file indexer.
Xem trên GitHub ↗Trang chủ ↗

Lựa chọn thay thế cho fzf

skim — một fuzzy finder có phím tắt tương thích fzf, viết bằng Rust thay vì Go.fzy — một fuzzy matcher nhỏ gọn, chỉ tập trung một việc, không có lớp tích hợp shell riêng.peco — công cụ lọc tương tác cho command line, cùng mô hình pipe vào, chọn, pipe ra.

Câu hỏi thường gặp

fzf có miễn phí và mã nguồn mở không?

fzf miễn phí và mã nguồn mở, phát hành theo giấy phép MIT, nên bạn có thể dùng, sửa đổi và phân phối lại fzf mà không phải trả phí bản quyền hay bị giới hạn cách sử dụng.

fzf hỗ trợ những shell nào?

fzf có script tích hợp chính thức cho Bash, Zsh, Fish và Nushell, thêm phím tắt và fuzzy completion cho từng shell. Bất kỳ shell tương thích POSIX nào cũng có thể gọi thẳng binary fzf mà không cần lớp tích hợp thêm.

Có thể dùng fzf với Neovim không?

fzf hoạt động với Neovim qua plugin chính thức junegunn/fzf.vim, cài cùng plugin fzf qua vim-plug. Người dùng Neovim thích cấu hình theo Lua có thể dùng fzf-lua, plugin mà chính README của fzf giới thiệu.

Làm sao để preview file trong fzf?

fzf hiển thị preview qua option `--preview`, chạy một lệnh shell trên dòng đang được highlight rồi hiện output ở panel bên cạnh, ví dụ `--preview 'bat -n --color=always {}'` để xem nội dung file.

fzf có chạy được trên Windows không?

fzf chạy trên Windows và cài được qua Chocolatey, Scoop, Winget hoặc MSYS2, theo README của dự án. Bản binary release cũng có sẵn trực tiếp trên trang releases của fzf trên GitHub để cài thủ công.

Làm sao để tắt các phím tắt (key binding) cụ thể của fzf?

Phím tắt của fzf được tắt bằng cách đặt biến *_COMMAND tương ứng thành chuỗi rỗng trước khi source script tích hợp shell — ví dụ `FZF_CTRL_R_COMMAND= FZF_ALT_C_COMMAND= eval "$(fzf --bash)"` tắt CTRL-R và ALT-C, vẫn giữ CTRL-T.

Ai nên dùng — và ai nên bỏ qua

Cài fzf nếu bạn dành nhiều thời gian trong terminal và đã quen dựa vào lịch sử shell hoặc `find`/`grep` để tìm thứ cần — phím tắt CTRL-R và CTRL-T sẽ đáng công trong vòng một ngày sử dụng. Bỏ qua nó nếu bạn làm việc chủ yếu qua GUI file manager và tính năng tìm kiếm của IDE, nơi một fuzzy finder terminal không chạm vào workflow của bạn, hoặc nếu bạn ngại chỉnh file rc của shell để gắn tích hợp.

Repo liên quan

Nguồn & ghi công

Dựa trên repository GitHub junegunn/fzf (github.com/junegunn/fzf) và README của dự án.

Dữ liệu GitHub · đồng bộ lần cuối 14 thg 8, 2026Đánh giá bởi Henry
← Về TopGit

fzf có đáng để bạn bỏ thời gian?

ChatGPT, Claude và Perplexity đều đọc được trang này. Hỏi thử xem họ nghĩ gì về fzf.

GitHub