Menguasai incremental search C-s/C-r yang mencari sambil mengetik, search dengan regex, navigasi antar hasil, serta query-replace M-% dan query-replace-regexp untuk refactor kode secara aman dengan konfirmasi per kemunculan sebelum mengubah seluruh file.

Navigasi & editing sudah dikuasai di episode 5. Sekarang masalah berikutnya: bagaimana menemukan sesuatu — dan mengubahnya — dalam file yang panjangnya ribuan baris? Episode 6 membahas Isearch, incremental search Emacs, dan query-replace, senjata refactor paling aman yang dimiliki editor.
Mengapa topik ini penting di dunia kerja? Karena refactor — mengganti nama fungsi, variabel, string — adalah tugas paling sering dan paling rawan error. Search yang cepat menemukan target; query-replace yang benar mencegah perubahan yang tidak diinginkan. Keduanya akan kalian pakai setiap hari.
Isearch (incremental search) mencari segera saat kalian mengetik — setiap huruf mempersempit hasil, dan Emacs menandai semua kemunculan di buffer:
C-s → mulai search ke depan (forward)
C-r → mulai search ke belakang (backward)Coba: buka file apa pun, tekan C-s, ketik emacs. Perhatikan:
C-s lagi untuk loncat ke berikutnya.| Shortcut | Aksi |
|---|---|
C-s | Kemunculan berikutnya (dalam sesi search) |
C-r | Kemunculan sebelumnya |
RET | Akhiri search, biarkan point di hasil |
C-g | Batal search, kembalikan point ke posisi awal |
M-p / M-n | Riwayat pencarian sebelumnya/berikutnya |
M-c → toggle case-sensitive / insensitive
M-s w → cari hanya kata penuh (word search)M-s w berguna saat mencari cat tapi tidak ingin kena concatenate. Cari dengan mode kata penuh lalu C-s lagi untuk melompat antar kemunculan.
Isearch mendukung regex langsung — cukup mulai dengan M-s r atau tekan C-M-s:
C-M-s → incremental regexp search ke depan
C-M-r → incremental regexp search ke belakangContoh mencari semua email dalam file:
C-M-s [a-z]+@[a-z]+\.comDi regex Emacs, + butuh escaping: [a-z]\+@[a-z]\+\.com. Karena karakter regex Emacs agak berbeda (misal \{ bukan {), episode 26 akan membedah detail syntax-nya.
Note
Bedakan dua notasi regex: Emacs regex (\b, \+, [[:digit:]]) vs PCRE yang dipakai ripgrep/grep (\d, +, \b). Isearch memakai syntax Emacs. Untuk pencarian lintas project dengan pattern PCRE, episode 17 akan memakai ripgrep yang sudah terintegrasi.
Ganti semua emacs dengan Emacs secara serampangan berbahaya — bisa kena string yang tidak diinginkan. query-replace menampilkan tiap kemunculan dan menunggu keputusan kalian:
M-% → query-replacePrompt meminta teks lama lalu teks baru. Pada tiap kemunculan, kalian harus memilih aksi:
| Tombol | Aksi |
|---|---|
y / SPC | Ganti kemunculan ini, lanjut |
n | Lewati kemunculan ini |
! | Ganti semua sisanya tanpa tanya |
u | Undo penggantian terakhir |
q / RET | Keluar |
. | Ganti kemunculan ini lalu keluar |
e | Edit string pengganti di minibuffer |
Alur yang sering dipakai: tekan ! setelah yakin 3-4 kemunculan pertama benar. Atau e untuk menyesuaikan case saat ganti nama.
C-M-% → query-replace-regexpIni versi regex dari query-replace — memungkinkan backreference dengan \1, \2:
C-M-% \([a-z_]+\)@example\.com → \1@company.devContoh di atas memindahkan semua alamat user@example.com menjadi user@company.dev tanpa mengetik ulang nama user. Dengan ! atau konfirmasi per item, refactor massal bisa dilakukan dengan aman.
M-% emacs Emacs hanya mengganti emacs huruf kecil. Untuk case-insensitive, gunakan M-% dengan case-replace — atau cukup tandai dengan C-M-% dan sesuaikan manual lewat e.\, tulis ganda (\\\\ untuk satu backslash literal). Ini salah satu sumber bug paling umum.C-x u kalau hasilnya mencurigakan — undo bekerja, dan C-x C-s belum dipencet.Search bisa dibatasi ke region (episode 5):
1. C-SPC → tandai awal region
2. gerak ke akhir region
3. M-% atau C-M-% → query-replace hanya dalam regionPola ini penting untuk "ganti nama variabel hanya di fungsi ini, bukan seluruh file".
Kita selesaikan studi kasus nyata — ganti nama variabel data menjadi payload di semua buffer file, dengan konfirmasi:
1. C-x C-f src/app.py RET
2. C-M-% data payload RET
3. (periksa tiap kemunculan, tekan y / n / !)
4. C-x C-s → simpanUntuk memindai kemunculan yang "berbahaya" (misal data di dalam string atau nama database), tekan n untuk melewatkan — query-replace tidak memeriksa konteks, kalian yang memeriksanya.
Pada episode 6 ini, kalian telah menguasai search & replace Emacs.
Inti yang harus dibawa pulang:
C-s/C-r) mencari segera saat mengetik; C-s lagi untuk loncat antar hasil.M-s w untuk kata penuh; C-M-s untuk regex search.M-% query-replace dengan konfirmasi per kemunculan — bukan ganti serampangan.C-M-% query-replace-regexp dengan backreference \1 — alat refactor paling aman.C-SPC + region, lalu M-%.Di episode 7 selanjutnya, kita membahas major & minor modes — bagaimana Emacs mengenali jenis file, memilih mode yang tepat, perbedaan prog-mode/text-mode/*-ts-mode, cara mengidentifikasi mode aktif dengan C-h m, dan mengubah mode secara manual lewat M-x. Sampai jumpa di episode 7!