Tools

ripgrep (rg): tìm kiếm trong codebase nhanh hơn grep, mặc định bỏ qua .gitignore

Tóm tắt

ripgrep tìm đệ quy, song song, mặc định bỏ qua file trong .gitignore, file ẩn và nhị phân. Dùng -t, -g để lọc, -uu khi cần tìm cả file bị ignore, -r chỉ để xem trước thay thế.

Tìm một chuỗi trong codebase là việc lập trình viên làm hàng chục lần mỗi ngày. Với grep -r, bạn hay gặp ba chuyện khó chịu: chậm, lục cả node_modules và thư mục build, và phải nhớ cả đống cờ để lọc. ripgrep (lệnh rg) giải quyết cả ba: mặc định tôn trọng .gitignore, bỏ qua file ẩn và file nhị phân, và tìm song song trên nhiều luồng. Đây cũng là công cụ chạy phía sau chức năng tìm kiếm của VS Code.

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

GitHub: https://github.com/BurntSushi/ripgrep · khoảng 70 nghìn sao · Rust · Unlicense/MIT

Cài đặt

# macOS
brew install ripgrep
# Windows
winget install BurntSushi.ripgrep.MSVC
# Ubuntu/Debian
sudo apt install ripgrep
# Có Rust
cargo install ripgrep

Cách dùng cơ bản

rg "TODO"                  # tìm trong thư mục hiện tại, đệ quy
rg -i "user not found"     # không phân biệt hoa thường
rg -S "UserService"        # smart case: có chữ hoa thì phân biệt
rg -w "id"                 # chỉ khớp nguyên từ
rg -F "a.b(c)"             # tìm chuỗi cố định, không coi là regex
rg -C 3 "panic"            # kèm 3 dòng ngữ cảnh trước và sau

Kết quả được nhóm theo file, có số dòng và tô màu chỗ khớp. Khi đầu ra được pipe sang lệnh khác, rg tự chuyển sang định dạng một dòng mỗi kết quả.

Lọc theo loại file và đường dẫn

CờTác dụngVí dụ
-t / -TChỉ tìm / loại trừ một loại filerg -t py "import os"
-gLọc bằng glob, thêm ! để loạirg -g '!*.min.js' "fetch("
-lChỉ in tên file có kết quảrg -l "deprecated"
-cĐếm số dòng khớp mỗi filerg -c "console.log"
-u, -uu, -uuuLần lượt bỏ qua .gitignore, thêm file ẩn, thêm file nhị phânrg -uu "API_KEY"
--type-listXem các loại file rg biếtrg --type-list | rg ts

Mẹo nâng cao

  • Xem trước khi thay thế: rg "oldName" -r "newName" chỉ in kết quả đã thay, không sửa file. Dùng để kiểm tra trước khi sửa thật bằng công cụ khác.
  • Regex mạnh hơn: rg -P "(?<=price: )\d+" bật PCRE2 để dùng lookaround.
  • Kết hợp với lệnh khác: rg -l "TODO" | xargs code mở mọi file còn TODO trong VS Code.
  • Cấu hình mặc định: tạo file, ví dụ ~/.ripgreprc, mỗi dòng một cờ (như --smart-case), rồi đặt export RIPGREP_CONFIG_PATH=~/.ripgreprc.
  • Đầu ra cho máy đọc: rg --json "pattern" trả về JSON để script hoặc công cụ khác xử lý.

Lưu ý

  • "Không thấy kết quả" thường là do file bị .gitignore hoặc là file ẩn. Thử lại với -uu trước khi kết luận chuỗi không tồn tại.
  • Khi tìm bí mật như API key, nhớ dùng -uu: file .env thường vừa ẩn vừa nằm trong .gitignore.
  • Cú pháp regex mặc định của rg (Rust regex) không hỗ trợ backreference; cần thì dùng -P.

Áp dụng thế nào?

  • Dev: Đặt alias quen tay, dùng -t và -g thay vì lọc bằng pipe. Kết hợp với fzf và bat để tìm và xem trước file ngay trong terminal.
  • Tech Lead: Dùng rg trong script CI đơn giản, ví dụ chặn merge khi còn console.log hoặc debugger trong code: ! rg -q "debugger" src/.
  • PM: Khi cần ước lượng phạm vi thay đổi (ví dụ đổi tên một API), nhờ dev chạy rg -c để có số chỗ bị ảnh hưởng thay vì đoán.

Nguồn & tham khảo

  1. BurntSushi/ripgrep — BurntSushi (GitHub)