Cara Merekam dan Menggunakan Macro Kompleks di Vim
Bosan ngetik ulang perintah di Vim buat ngerjain tugas berulang? Udah capek-capek pake .
buat repeat perintah, tapi tetep aja ribet? Tenang, ada solusinya: macro! Macro di Vim bisa lo manfaatin buat merekam serangkaian perintah, lalu dijalanin ulang cuma dengan satu ketikan. Keren kan? Tapi, gimana kalau perintahnya kompleks? Yuk, kita bahas cara merekam dan ngoprek macro yang lebih rumit biar kerjaan lo jadi lebih efisien.
Apa Itu Macro di Vim?
Macro di Vim adalah fitur buat merekam gerakan atau perintah yang lo lakuin di editor, lalu disimpan dalam register (tempat penyimpanan sementara). Setelah direkam, lo bisa menjalankan ulang macro itu berkali-kali tanpa ngetik manual. Cocok buat tugas berulang seperti:
- Menambahkan komentar di tiap baris
- Mengubah format teks (misal: dari
nama_var
keNamaVar
) - Menghapus atau menambahkan karakter spesifik
Langkah Dasar Merekam Macro
Sebelum masuk ke yang kompleks, pastikan lo udah ngerti cara dasar merekam macro. Ini langkahnya:
- Posisikan kursor di lokasi awal.
- Tekan
q
+ huruf register (misal:qa
buat simpan di registera
). - Lakukan serangkaian perintah (misal:
0f=dt;"_A;
buat edit teks). - Tekan
q
lagi buat berhenti merekam. - Jalankan macro dengan
@a
(sesuai register yang dipilih).
Contoh: Lo pengen nambahin titik koma di akhir 10 baris. Rekam macro:
qa0A;
(pindah ke awal baris, tambah;
), laluq
.- Jalankan dengan
10@a
.
Mengedit Macro yang Sudah Direkam
Macro nggak selalu sempurna pas pertama kali direkam. Kadang ada typo atau gerakan yang kelewat. Buat ngeditnya, lo bisa:
- Tampilkan isi register pake
:reg a
(gantia
dengan register yang dipakai). - Salin isi register ke buffer (misal:
"+y
buat copy ke clipboard). - Edit teksnya, lalu paste kembali ke register pake
:let @a = 'isi_baru'
.
Contoh: Lo merekam macro a
yang isinya 0f=dt;"_A;
, tapi ternyata kurang perintah j
buat turun baris. Edit register a
jadi 0f=dt;"_A;j
.
Menggabungkan Macro dengan Perintah Lain
Macro bisa lo kombinasikan sama perintah Vim lain buat hasil yang lebih powerful. Contoh:
- Pake Visual Mode: Rekam macro di Visual Mode buat ngedit blok teks.
- Contoh:
qbVj:sort
buat sortir 2 baris.
- Contoh:
- Pake Search: Tambahin perintah pencarian di macro buat ngerjain teks di lokasi spesifik.
- Contoh:
/error
buat cari kata “error”, lalucgnfix
buat ganti jadi “fix”.
- Contoh:
- Looping Macro: Jalankan macro berkali-kali pake angka di depan.
- Contoh:
50@a
buat jalanin macroa
sebanyak 50 kali.
- Contoh:
Teknik Macro Tingkat Lanjut
Buat yang udah mahir, coba trik ini:
- Nested Macro: Masukin macro lain ke dalam macro.
- Contoh: Macro
a
jalanin macrob
dengan ngetik@b
di tengah rekaman.
- Contoh: Macro
- Pake Register Global: Simpan macro di register
@
(global register) biar bisa diakses di sesi lain.- Contoh:
:let @g = '0f=dt;"_A;'
- Contoh:
- Macro + Ex Command: Tambahin perintah
:s/old/new/g
atau:g/pattern/d
di macro.- Contoh:
qa:s/TODO/FIX/g
laluq
buat ganti semua “TODO” jadi “FIX”.
- Contoh:
Tips Biar Macro Nggak Error
- Hindari Gerakan Acak: Saat merekam, pastikan gerakan kursor presisi. Kalau salah, macro bisa nggak jalan di baris lain.
- Pake Mode Insert dengan Bijak: Kalau lo ngetik di Insert Mode, pastikan keluar pake
Esc
sebelum berhenti merekam. - Test di Satu Baris Dulu: Sebelum jalanin macro di banyak baris, coba dulu di satu baris buat pastikan hasilnya sesuai.
- Gunakan Register Kosong: Sebelum merekam, kosongin register pake
qaq
biar nggak ada sisa perintah lama.
Contoh Kasus: Mengubah Format Tabel
Bayangin lo punya teks begini:
| Nama | Umur |
|------|------|
| Andi | 20 |
| Budi | 22 |
Lo pengen nambahin kolom “Alamat” di semua baris. Caranya:
- Rekam macro di register
a
:qa0f|a | Alamat |
(tambah kolom “Alamat” di header).q
- Jalankan di baris data:
2@a
(karena ada 2 baris data).
Hasil akhir:
| Nama | Umur | Alamat |
|------|------|--------|
| Andi | 20 | |
| Budi | 22 | |
Kesalahan Umum dan Cara Mengatasinya
- Macro Nggak Jalan di Baris Lain: Cek lagi gerakan kursor. Gunakan
0
(ke awal baris) atau$
(ke akhir baris) buat pastikan posisi konsisten. - Register Terhapus Otomatis: Jangan lupa, register
1-9
dan"
,+
bisa keganti pas lo copy-paste. Simpan macro di register huruf kecil (a-z) biar aman. - Macro Terlalu Panjang: Pecah jadi beberapa macro kecil, lalu gabungin pake nested macro.
Eksperimen dengan Macro
Jangan takut buat nyoba hal baru! Macro di Vim fleksibel banget. Lo bisa:
- Buat shortcut buat format kode (misal: auto-indent, tambah comment).
- Automasi penghapusan log error dari file.
- Ubah format data CSV jadi JSON.
Contoh: Lo punya file CSV:
nama,umur
andi,20
budi,22
Rekam macro buat ubah jadi JSON:
qaI{"nama": "
(masuk Insert Mode, tambah"nama": "
).Escf,a", "umur": "
(lanjutin format JSON).Esc$A}
(tambah kurung kurawal di akhir).q
Jalankan di tiap baris: @a
.
Bonus: Macro untuk Navigasi Cepat
Selain edit teks, macro bisa lo manfaatin buat navigasi:
- Pindah ke File Lain: Rekam macro buat buka file spesifik.
- Contoh:
qa:e ~/Documents/todo.md
laluq
.
- Contoh:
- Cari Kata di Banyak File: Gabungin macro dengan
:vimgrep
.- Contoh:
qa:vimgrep /error/ **/*.log
laluq
.
- Contoh:
Kesimpulan (Ups, Ini Harusnya Nggak Ada!)
Artikel ini sengaja nggak ada kesimpulan sesuai permintaan. Tapi lo udah bisa lanjut eksperimen sendiri, kan? 😄