Artikel terbaru Menggunakan makro Vim untuk mengotomatiskan tugas yang sering dilakukan oleh Ricardo Gerardi menjelajahi apa itu makro dan manfaat menggunakan makro untuk mengotomatiskan tugas yang berulang. Dalam artikel ini, Anda akan melangkah lebih jauh dan menjelajahi makro rekursif apa yang merupakan beberapa contoh di mana mereka mungkin berguna, dan beberapa jebakan yang mungkin Anda temui.
Alur kerja makro dasar terdiri dari record, replay, dan profit. Saat merekam, pilih di register mana ia akan melakukannya. Ada register dari a
ke z
tersedia.
[ Anda mungkin juga menyukai: Cara menggunakan Ansible untuk mengonfigurasi Vim ]
Setelah Anda membuka Vim, untuk merekam makro, mulailah dengan menekan q
dan tentukan register untuk menyimpannya. Kemudian ketik urutan perintah yang akan dieksekusi dan q
untuk mengakhiri dan menyimpan rekaman. Setelah itu, putar ulang makro dengan menekan @ dan daftar.
Misalnya, rekam makro seperti qaA - suffixESCjq
, lalu putar ulang dengan menekan @a
berapa kali diperlukan. Untuk mempermudah memutar ulang makro, setelah menjalankannya sekali, ketik @@
untuk memutar ulang.
Selengkapnya tentang cara kerja makro
Menggali makro sedikit lebih banyak dan menjelajahi beberapa internalnya. Makro akan berhenti berjalan jika tidak dapat menjalankan salah satu perintahnya. Misalnya, jika f
( (yang berarti temukan ( dan posisikan kursor di atasnya ) tidak dapat dijalankan, maka pemutaran ulang makro akan segera dihentikan. Anda mungkin menganggap ini masalah, tetapi sebenarnya ini adalah fitur, dan Anda dapat menggunakannya sesuai keinginan Anda.
Saat merekam makro, urutan perintah dimasukkan. Itu berarti Anda dapat menggunakan perintah apa pun, termasuk mengeksekusi makro (@
Pada titik ini, Anda bisa mulai merekam dan memutar ulang beberapa makro rekursif. Namun sebelum Anda melakukannya, lihat satu hal lagi sebelum terjun langsung ke dalamnya. Saat merekam makro, perintah yang diketik akan dieksekusi saat perekaman berjalan. Jadi, jika Anda memutar ulang makro sebagai bagian dari rekaman dan register terkait memiliki sesuatu yang sudah direkam, itu akan berjalan dan mungkin akan membawa hasil yang tidak diharapkan.
Inilah tip pertama:Pastikan register kosong sebelum merekam makro rekursif. Hapus register dengan menjalankan q
q
, yang sama dengan memulai perekaman di
Dengan semua itu, akhirnya tiba saatnya untuk menjelajahi beberapa skenario di mana makro rekursif akan menghemat waktu pengeditan tambahan.
Merekam dan memutar ulang makro rekursif
Untuk memulainya, mari kita selesaikan masalah di artikel sebelumnya:Ubah file CSV berikut yang dihasilkan oleh sistem pemantauan hipotetis menjadi /etc/hosts
format file.
$ cat hosts.csv
Description,Hostname,IPAddress,FQDN
"OCP Master Node 1",ocpmaster01,192.168.0.20,ocpmaster01.home.ca
"OCP Master Node 2",ocpmaster02,192.168.0.21,ocpmaster02.home.ca
"OCP Master Node 3",ocpmaster03,192.168.0.22,ocpmaster03.home.ca
"OCP Worker Node 1",ocpnode01,192.168.0.30,ocpnode01.home.ca
"OCP Worker Node 2",ocpnode02,192.168.0.31,ocpnode02.home.ca
"OCP Worker Node 3",ocpnode03,192.168.0.32,ocpnode03.home.ca
"Ansible Host 1",ansibleh01,192.168.0.144,ansibleh01.home.ca
"Ansible Host 2",ansibleh02,192.168.0.145,ansibleh02.home.ca
Inilah hasil yang diharapkan:
192.168.0.20 ocpmaster01.home.ca ocpmaster01 #OCP Master Node 1
192.168.0.21 ocpmaster02.home.ca ocpmaster02 #OCP Master Node 2
192.168.0.22 ocpmaster03.home.ca ocpmaster03 #OCP Master Node 3
192.168.0.30 ocpnode01.home.ca ocpnode01 #OCP Worker Node 1
192.168.0.31 ocpnode02.home.ca ocpnode02 #OCP Worker Node 2
192.168.0.32 ocpnode03.home.ca ocpnode03 #OCP Worker Node 3
192.168.0.144 ansibleh01.home.ca ansibleh01 #Ansible Host 1
192.168.0.145 ansibleh02.home.ca ansibleh02 #Ansible Host 2
Makro yang direkam untuk membantu mengonversi format file adalah sebagai berikut:
0r#f"xldf,A,<ESC>p0df,$px:s/,/\t/g<ENTER>j
Dengan asumsi bahwa Anda baru saja membuka Vim dan makro di atas belum direkam, Anda memiliki beberapa opsi untuk mengisi register apa pun dengan konten makro:
1) Rekam makro dan ketik semua perintah
Mulailah dengan menekan q
lalu q
.
2) Atur register
Anda dapat mengatur register menggunakan perintah berikut :let
@Esc
dan Enter
. Untuk mengatasinya, gunakan :execute
memerintah. Hal ini memungkinkan memasukkan kunci khusus sebagai urutan melarikan diri. Dalam mode normal, ketik :
lalu paste baris berikut dan tekan Enter
:
execute "let @h='0r#f\"xldf,A,\<Esc>p0df,$px:s/,/\\t/g\<Enter>j'"
Pastikan register h
isinya diatur dengan benar. Itu dapat dilakukan dengan menjalankan :reg
reg h
dalam hal ini:
:reg h
--- Registers ---
"h 0r#f"xldf,A,^[p0df,$px:s/,/\t/g^Mj
Isi register sedikit berbeda dari apa yang ditetapkan oleh :execute
memerintah. Ini karena :execute
dikonversi \^[
dan ^M
masing-masing. Itulah yang digunakan Vim secara internal untuk benar-benar "menekan" tombol.
Pada titik ini, register h
berisi makro yang sama persis yang direkam pada artikel Gunakan makro Vim untuk mengotomatisasi tugas yang sering. Langkah selanjutnya adalah membuatnya rekursif. Dengan cara ini, Anda dapat memicunya sekali, dan itu berulang secara rekursif hingga mencapai akhir file.
Ada sedikit trik untuk mengedit makro yang sudah direkam dan membuatnya rekursif. Anda juga dapat menggunakannya untuk menambahkan perintah yang hilang dan membuat perubahan tanpa merekam keseluruhan makro.
Mulai dengan :let @h='
, lalu Ctrl-r
Ctrl-r h
, ketik @h'
di akhir, dan terakhir tekan Enter
. Ctrl-r Ctrl-r
:reg h
.
Untuk memeriksa apakah Anda memiliki semuanya, jalankan :reg
:reg h
--- Registers ---
"h 0r#f"xldf,A,^[p0df,$px:s/,/\t/g^Mj@h
Setelah itu, buka baris kedua di hosts.csv
dan putar ulang makro @@h
dalam contoh ini. Ini akan berlanjut hingga akhir file memperbarui semua baris. Itu mungkin karena makro memiliki 0
di awal dan j
sebelum memutar ulang dirinya sendiri secara rekursif. Itu membuatnya turun satu baris, dan saat menjalankan ulang makro, kursor ditempatkan di awal baris.
Perhatikan juga bahwa makro berjalan hingga akhir file dan berhenti karena tidak dapat turun lagi dengan j
itu adalah kondisi istirahat kami untuk eksekusi rekursif.
[ Mencari lebih banyak tentang otomatisasi sistem? Mulailah dengan The Automated Enterprise, buku gratis dari Red Hat. ]
Menutup
Ini adalah perjalanan yang panjang, tetapi sekarang Anda memiliki alat lain yang tersedia untuk membantu mengotomatiskan tugas yang berulang, bahkan jika tugas yang berulang itu mengulang makro berulang kali.
Anda juga menjelajahi pengeditan makro, jadi pada titik ini, Anda mungkin terbiasa merekamnya dari awal. Jika Anda merekam alih-alih mengedit makro, pastikan untuk mengosongkan register target sebelum memulai dan memiliki @j
akan melakukannya.
Manfaat lain dari makro rekursif adalah jika terjadi kesalahan, dapat dibalik dengan menggunakan undo tunggal. .