Belajar Emacs - Search & Replace (Isearch)
Episode 6 of 30

Belajar Emacs - Search & Replace (Isearch)

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.

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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.

Incremental Search: Cari Sambil Mengetik

Isearch (incremental search) mencari segera saat kalian mengetik — setiap huruf mempersempit hasil, dan Emacs menandai semua kemunculan di buffer:

text
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:

  • Emacs mencari segera saat kalian mengetik huruf pertama.
  • Semua kemunculan disorot di seluruh buffer.
  • Point berhenti di kemunculan pertama; tekan C-s lagi untuk loncat ke berikutnya.
ShortcutAksi
C-sKemunculan berikutnya (dalam sesi search)
C-rKemunculan sebelumnya
RETAkhiri search, biarkan point di hasil
C-gBatal search, kembalikan point ke posisi awal
M-p / M-nRiwayat pencarian sebelumnya/berikutnya

Kasus Huruf & Kata Penuh

text
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 Regex

Isearch mendukung regex langsung — cukup mulai dengan M-s r atau tekan C-M-s:

text
C-M-s  →  incremental regexp search ke depan
C-M-r  →  incremental regexp search ke belakang

Contoh mencari semua email dalam file:

text
C-M-s  [a-z]+@[a-z]+\.com

Di 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.

Query-Replace: Ganti dengan Konfirmasi

Ganti semua emacs dengan Emacs secara serampangan berbahaya — bisa kena string yang tidak diinginkan. query-replace menampilkan tiap kemunculan dan menunggu keputusan kalian:

text
M-%   →  query-replace

Prompt meminta teks lama lalu teks baru. Pada tiap kemunculan, kalian harus memilih aksi:

TombolAksi
y / SPCGanti kemunculan ini, lanjut
nLewati kemunculan ini
!Ganti semua sisanya tanpa tanya
uUndo penggantian terakhir
q / RETKeluar
.Ganti kemunculan ini lalu keluar
eEdit string pengganti di minibuffer

Alur yang sering dipakai: tekan ! setelah yakin 3-4 kemunculan pertama benar. Atau e untuk menyesuaikan case saat ganti nama.

Query-Replace Regexp: Senjata Refactor

text
C-M-%  →  query-replace-regexp

Ini versi regex dari query-replace — memungkinkan backreference dengan \1, \2:

text
C-M-%  \([a-z_]+\)@example\.com   →  \1@company.dev

Contoh 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.

Pitfall Query-Replace

  • Case mismatch: 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.
  • Regex escaping ganda: kalau pattern mengandung \, tulis ganda (\\\\ untuk satu backslash literal). Ini salah satu sumber bug paling umum.
  • Selalu cek hasil: setelah query-replace, tekan C-x u kalau hasilnya mencurigakan — undo bekerja, dan C-x C-s belum dipencet.

Search Hanya di Region

Search bisa dibatasi ke region (episode 5):

text
1. C-SPC  →  tandai awal region
2. gerak ke akhir region
3. M-% atau C-M-%  →  query-replace hanya dalam region

Pola ini penting untuk "ganti nama variabel hanya di fungsi ini, bukan seluruh file".

Refactor Kecil: Latihan Terpadu

Kita selesaikan studi kasus nyata — ganti nama variabel data menjadi payload di semua buffer file, dengan konfirmasi:

text
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  →  simpan

Untuk memindai kemunculan yang "berbahaya" (misal data di dalam string atau nama database), tekan n untuk melewatkan — query-replace tidak memeriksa konteks, kalian yang memeriksanya.

Penutup

Pada episode 6 ini, kalian telah menguasai search & replace Emacs.

Inti yang harus dibawa pulang:

  • Isearch (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.
  • Batasi ke region dengan 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!

Belajar Emacs - Search & Replace (Isearch) | Belajar Emacs