Tools

fzf: bộ lọc mờ cho terminal, tìm file, lịch sử lệnh, nhánh git trong vài phím

Tóm tắt

fzf biến mọi danh sách thành menu chọn nhanh. Bật tích hợp shell để có Ctrl+R tìm lịch sử, Ctrl+T chọn file, Alt+C nhảy thư mục, rồi ghép với fd và bat như IDE trong terminal.

Bạn nhớ mang máng tên file có chữ "invoice", hay một lệnh dài gõ từ tuần trước, nhưng không nhớ chính xác. fzf là "bộ lọc mờ" cho terminal: nhận một danh sách bất kỳ (file, lịch sử lệnh, nhánh git, process), cho bạn gõ vài ký tự để lọc tức thì, rồi trả lại dòng bạn chọn. Vì nó chỉ làm đúng một việc là chọn từ danh sách, bạn có thể ghép nó với gần như mọi lệnh khác.

Trang GitHub của junegunn/fzf
Trang GitHub của junegunn/fzf (ảnh chụp tháng 11/2026)

GitHub: https://github.com/junegunn/fzf · khoảng 84 nghìn sao · Go · MIT

Cài đặt và bật tích hợp shell

brew install fzf          # macOS
winget install fzf        # Windows
sudo apt install fzf      # Ubuntu/Debian (bản trong kho có thể cũ)

# Thêm vào ~/.zshrc (bash: eval "$(fzf --bash)")
source <(fzf --zsh)

Dòng cuối bật phím tắt và tự hoàn thành. Với bản cũ không có --zsh, dùng script cài đặt trong README.

Ba phím tắt dùng hằng ngày

PhímTác dụngTình huống
Ctrl+RTìm trong lịch sử lệnhGõ "dock run" để tìm lại lệnh docker dài hôm trước
Ctrl+TChọn file/thư mục, dán đường dẫn vào dòng lệnhvim rồi Ctrl+T để chọn file cần mở
Alt+CChọn thư mục con và cd vàoNhảy nhanh vào thư mục sâu

Thêm nữa: gõ ** rồi Tab để tự hoàn thành bằng fzf, ví dụ cd **<Tab> hay kill -9 **<Tab> để chọn process.

Cú pháp tìm kiếm

  • conf yml: khớp mờ cả hai từ, theo thứ tự bất kỳ.
  • 'exact: khớp chính xác chuỗi.
  • ^src / .ts$: bắt đầu hoặc kết thúc bằng.
  • !test: loại các dòng chứa "test".
  • .ts$ | .tsx$: điều kiện HOẶC.

Ghép fzf với lệnh khác

# Chuyển nhánh git bằng cách chọn
git branch --all | fzf | sed 's/remotes\/origin\///' | xargs git switch

# Mở file với khung xem trước có tô màu (cần bat)
fzf --preview 'bat --color=always {}' | xargs -r code

# Dùng fd làm nguồn danh sách file (nhanh, tôn trọng .gitignore)
export FZF_DEFAULT_COMMAND='fd --type f --hidden --exclude .git'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"

Trong khung fzf: Tab để chọn nhiều dòng (khi chạy với -m), Ctrl+J/K hoặc mũi tên để di chuyển, Enter để xác nhận, Esc để huỷ.

Lưu ý

  • Bản fzf trong kho apt có thể cũ, thiếu --zsh; cài từ GitHub release hoặc Homebrew nếu cần tính năng mới.
  • Trên macOS, Alt+C cần đặt Option là phím Meta trong cài đặt terminal (iTerm2, Terminal.app).
  • Khi pipe kết quả sang lệnh nguy hiểm như rm, nhìn kỹ lựa chọn trước khi nhấn Enter.

Áp dụng thế nào?

  • Dev: Bật tích hợp shell ngay hôm nay; chỉ riêng Ctrl+R đã tiết kiệm nhiều thời gian gõ lại lệnh. Sau đó viết vài hàm nhỏ trong .zshrc cho việc lặp lại (chọn nhánh, chọn container).
  • Tech Lead: Đưa fzf vào script nội bộ cần người chọn (chọn môi trường deploy, chọn service để xem log) thay vì bắt nhớ tên chính xác.
  • PM: Công cụ nhỏ nhưng giảm thao tác lặp: đáng đưa vào tài liệu onboarding cho dev mới.

Nguồn & tham khảo

  1. junegunn/fzf — junegunn (GitHub)