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.

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ụng | Ví dụ |
|---|---|---|
-t / -T | Chỉ tìm / loại trừ một loại file | rg -t py "import os" |
-g | Lọc bằng glob, thêm ! để loại | rg -g '!*.min.js' "fetch(" |
-l | Chỉ in tên file có kết quả | rg -l "deprecated" |
-c | Đếm số dòng khớp mỗi file | rg -c "console.log" |
-u, -uu, -uuu | Lần lượt bỏ qua .gitignore, thêm file ẩn, thêm file nhị phân | rg -uu "API_KEY" |
--type-list | Xem các loại file rg biết | rg --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 codemở 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 đặtexport 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ị
.gitignorehoặc là file ẩn. Thử lại với-uutrướ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.envthườ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
-tvà-gthay 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.loghoặcdebuggertrong 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
- BurntSushi/ripgrep — BurntSushi (GitHub)