Kamu pasti pernah ngalamin ini. Sebuah nilai config lagi bersembunyi di codebase yang isinya puluhan ribu baris. Kamu pakai grep -r, liat tembok baris yang match, terus pipa ke find dan sed biar bisa dipahami. Ada cara yang lebih cepat, dan caranya itu tumpukan tiga tools open source yang saling melengkapi: ripgrep buat nyari, fzf buat milih secara interaktif, dan bat buat output yang enak dibaca. Ketiganya kecil, cepat, dan terinstall dalam hitungan detik di Linux dan macOS.
Ini review yang hands-on. Setiap command di bawah ini saya jalankan di codebase asli, jadi kamu bisa copy dan hasilnya bentuknya bakal sama.
Prerequisites
- Linux atau macOS dengan package manager
- Codebase atau folder dengan beberapa ribu file buat jadi bahan cari
grepdanfindudah terpasang (pasti udah ada)
Install ketiga tools
Install masing-masing pakai package manager kamu.
# Debian/Ubuntu
sudo apt install ripgrep fzf bat
# macOS (Homebrew)
brew install ripgrep fzf bat
Debian menamai binary bat dengan batcat buat menghindari bentrok dengan package lama. Kalau command bat nggak ada di distro kamu, pakai batcat atau tambahin alias.
ripgrep: pencarian yang nggak keteteran
ripgrep adalah pengganti grep yang ditulis di Rust. Secara default dia menghormati .gitignore, jadi otomatis skip node_modules, hasil build, dan kode vendor kecuali kamu suruh minta. Itulah kenapa pencarian terasa instan.
Cari di sebuah folder, dengan nomor baris:
rg "TODO" src
Cari cuma di jenis file config:
rg --type json "name" .
List semua file dari jenis tertentu, cara kerjanya kayak find tapi lebih cepat dan menghormati ignore:
rg --files -g '*.ts' src
Cocokkan file berdasarkan glob nama file:
rg "portfolio" -g '*.toml' .
Hitung match per file, berguna buat lihat di mana sebuah istilah paling terkumpul:
rg -c "astro" src
Menjawab dua pertanyaan praktis tiap hari: di mana string ini, dan file mana yang cocok sama pola ini. Output-nya warna-warni secara default dan nama file ditulis supaya tools berikutnya bisa langsung menelannya.
fzf: dari hasil match jadi pilihan
fzf adalah fuzzy finder. Kamu ketik beberapa huruf dan semua match parsial terurut berdasarkan relevansi, dengan hasil terbaik yang disorot. Sifatnya interaktif, jadi dia mengambil alih terminal sementara kamu filter.
Pakai sendirian buat milih file dengan cepat:
fzf
Bagian yang powerful adalah komposisinya. Kasih fzf aliran nama file dari ripgrep, pilih satu, lalu jalankan command di atasnya:
vim "$(rg --files | fzf)"
Itu satu kebiasaan yang menggantikan sebagian besar waktu bolak-balik tab direktori. Pipeline-nya: list file cepat, fuzzy-filter cepat, eksekusi.
bat: output yang membacakan dirinya sendiri
bat adalah cat dengan syntax highlighting, nomor baris, dan git gutter. Arahkan ke file apa pun:
bat src/data/articles.ts
Dia juga membaca standard input, dan itu yang bikin dia cocok dirangkai di pipeline. Runtutkan seluruh arm: cari istilah, fuzzy-pick satu file, lalu buka file itu dengan pretty print di baris yang match.
rg --line-number "TODO" "$(rg --files | fzf)" | bat
Verdict
| Tool | Fungsi | Terbaik buat | Hati-hati |
|---|---|---|---|
| ripgrep | cari konten + nama file yang cepat | cari puluhan gigabyte dalam milidetik, menghormati .gitignore | atur jenis pakai rg --add-type kalau extension kamu nggak dikenal |
| fzf | pilih secara interaktif dengan fuzzy | milih dari daftar panjang dengan cepat, komposisi dengan command apa pun | interaktif, jadi musti ada terminal |
| bat | pretty print file dan stdin | baca kode dengan syntax highlighting dan nomor baris | di Debian namanya bisa batcat |
Ketiganya paling kuat kalau dipakai bareng. ripgrep kerja berat, fzf bikin kamu milih, bat bikin hasilnya enak dibaca. Nggak ada yang menggantikan yang lain, dan semuanya terinstall satu baris.
Kapan pakai ini dibanding alternatif
grep/find: kembali pakai kalau butuh perilaku POSIX di mesin yang nggak bisa install apa-apa. Begitu ripgrep dan fzf ada, kamu jarang akan sentuh lagi.ack/ag: ripgrep umumnya lebih cepat dan tersedia di lebih banyak package manager; kalau kamu udah kenal ack atau ag, belajar ripgrep cuma hitungan menit karena flag-nya mirip.- Pencarian IDE (Ctrl+Shift+F): pakai intellisense IDE kalau butuh hasil yang terikat sama project tree dan refactoring terintegrasi. Pakai tumpukan terminal kalau mau cari file di luar workspace atau mau script hasilnya.
- Spotlight / app launcher: fuzzy picker juga ada versi GUI (kayak Raycast, Alfred, atau uLauncher). fzf kerja yang sama di dalam shell, dan itu penting kalau kamu hidup di terminal.
fd:findyang lebih cepat, cocok dipasangkan dengan fzf dan bat. Kalaufindjadi bottleneck kamu, tambahfd; ripgrep udah nge-cover kebanyakan kebutuhan nama file pakai--files.
Langkah selanjutnya
Sambungkan fzf ke shell history dan biarkan dia ngejalanin command dari output-nya sendiri.
# fuzzy-search shell history
history | fzf
Baca man page kalau sebuah flag nggak berperilaku seperti dugaan: man rg, man fzf. Dua-duanya mendokumentasikan sistem tipe dan key bindings secara mendalam. Kalau kamu sering menulis skrip pencarian, lihat rg --files --json dan fzf --preview, yang menampilkan isi file di panel samping sambil kamu filter.