GNU/Linux >> Belajar Linux >  >> Linux

Gunakan makro Vim untuk mengotomatiskan tugas yang sering dilakukan

Di Vim, makro adalah fitur yang memungkinkan Anda merekam urutan perintah yang Anda gunakan untuk melakukan tugas tertentu. Anda kemudian menjalankan makro itu berkali-kali untuk mengulangi pekerjaan yang sama secara otomatis.

Makro membuat tugas yang membosankan dan berulang dapat dikelola dengan menjalankan tugas hanya sekali, kemudian menggunakan kekuatan Vim untuk mengotomatiskannya. Makro meningkatkan alur kerja Anda dan sangat menghemat waktu.

Dalam artikel ini, kita akan menjelajahi konsep makro Vim dengan menerapkannya pada contoh praktis.

Masalahnya

Misalkan Anda menerima file CSV yang berisi daftar host di jaringan Anda dari sistem pemantauan hipotetis. Anda ingin mengubahnya menjadi /etc/hosts format untuk mengaktifkan resolusi nama lokal untuk host.

File aslinya adalah ini:

$ 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

Output yang diharapkan adalah ini:

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

Untuk mendapatkan output yang diharapkan, Anda perlu mengedit input dengan mengubah posisi beberapa bidang, menghapus tanda kutip, dan menyisipkan karakter Tab atau komentar (# ) dengan tepat. Mari gunakan makro Vim untuk menangani tugas ini.

Pecahkan masalah dan rekam makro

Alur kerja dasar makro Vim terdiri dari merekam perintah dan penekanan tombol Anda saat melakukan pengeditan yang diperlukan untuk memecahkan masalah pada baris pertama, menyimpan urutan perintah ke register, dan kemudian memutar ulang makro untuk melakukan hal yang sama pada baris yang tersisa.

Untuk merekam makro dan menyimpannya ke register, ketik kunci q diikuti dengan surat dari a ke z yang mewakili register untuk menyimpan makro, diikuti oleh semua perintah yang ingin Anda rekam, lalu ketik kunci q lagi untuk menghentikan perekaman.

q<register><commands>q

Misalnya, untuk merekam makro dasar yang menyisipkan baris baru dan menyimpannya untuk mendaftarkan a , gunakan urutan ini:

qao<ESC>q

Meskipun makro ini tidak berguna, ini mencontohkan urutan yang diperlukan untuk merekam makro lainnya.

Merekam makro di Vim adalah latihan logika dan menggunakan perintah Vim dengan tepat. Ingatlah bahwa Anda ingin makro ini dapat diulang di baris lain, meskipun inputnya agak bervariasi. Misalnya, sebaiknya gunakan perintah dw untuk menghapus kata daripada mengulangi perintah x untuk menghapus karakter, karena jumlah karakter dalam kata dapat bervariasi dari baris ke baris.

Sekarang, mari kita rekam makro yang mengonversi baris pertama file CSV kita ke format yang diperlukan dan menyimpannya di register h . Mulailah dengan menempatkan kursor di mana saja pada baris pertama yang ingin kita ubah dalam file:

"OCP Master Node 1",ocpmaster01,192.168.0.20,ocpmaster01.home.ca

Kemudian, mulailah merekam makro dengan menekan q dan h untuk menyimpannya untuk mendaftar h :

qh

Saat Anda merekam makro, baris status di bagian bawah menunjukkan pesan ini:

recording @h

Selanjutnya, ini adalah praktik yang baik untuk memindahkan karakter Anda ke posisi yang diketahui, sehingga makro bekerja dengan cara yang sama secara independen dari tempat kursor berada saat makro dimulai. Mari kita gunakan awal garis sebagai titik awal dengan menekan 0 :

0

Bidang pertama ini adalah deskripsi, yang menjadi komentar di akhir baris dalam output. Saat Anda berada di sana, ganti tanda kutip " karakter dengan karakter komentar # , jadi kita tidak perlu melakukan ini saat kita memindahkan bidang ini ke akhir baris nanti:

r#

Selanjutnya, hapus tanda kutip berikutnya dengan menggerakkan kursor ke sana menggunakan f perintah dan tekan x untuk menghapusnya:

f"x

Pada titik ini, baris pertama Anda terlihat seperti ini:

#OCP Master Node 1,ocpmaster01,192.168.0.20,ocpmaster01.home.ca

Selanjutnya, pindahkan kursor satu posisi ke kanan menggunakan l , dan hapus seluruh nama host hingga koma berikutnya:

ldf,

Ingat, saat Anda menghapus teks di Vim, Anda juga menyalinnya. Sekarang, mari kita tempel di akhir baris. Sisipkan teks di akhir dengan menggunakan A dan menyisipkan koma, lalu tekan p untuk menempelkan nama host:

A,<ESC>p

Sekarang bidang hampir dalam urutan yang diinginkan. Mari pindahkan komentar ke akhir baris. Lakukan ini dengan memindahkan kursor kembali ke awal dengan 0 , dan menghapus seluruh komentar hingga koma berikutnya dengan df, :

0df,

Kemudian, pindahkan kursor ke akhir baris dengan $ , rekatkan teks dengan p , dan hapus koma terakhir dengan x :

$px

Semua bidang sekarang berada di posisi yang diinginkan, dan baris Anda terlihat seperti ini:

192.168.0.20,ocpmaster01.home.ca,ocpmaster01,#OCP Master Node 1

Terakhir, ganti semua koma dengan karakter Tab dengan menggunakan s perintah:

:s/,/\t/g<ENTER>

Baris cocok dengan output yang diinginkan:

192.168.0.20    ocpmaster01.home.ca     ocpmaster01     #OCP Master Node 1

Selesaikan makro Anda dengan memindahkan kursor ke baris berikutnya dengan menekan j sehingga Anda dapat berulang kali menggunakan makro. Terakhir, hentikan perekaman dengan menekan q :

jq

Anda merekam makro, dan siap digunakan. Mari kita lihat bagaimana Anda dapat memeriksanya selanjutnya.

Melihat dan memuat makro

Karena makro disimpan ke dalam register Vim, Anda dapat melihat makro yang disimpan dengan menggunakan perintah :reg untuk melihat isi dari semua register:

:reg
--- Registers ---
""   ,
"h   0r#f"xldf,A,^[p0df,$px:s/,/\t/g^Mj
"-   ,
...

Anda juga dapat memeriksa register tertentu, dalam register kasus kami h, dengan menyediakannya sebagai parameter ke :reg perintah:

:reg h
--- Registers ---
"h   0r#f"xldf,A,^[p0df,$px:s/,/\t/g^Mj

Dengan menggunakan kedua metode tersebut, Anda dapat melihat isi register h cocok dengan makro yang kami rekam sebelumnya. Perhatikan bahwa karakter khusus seperti ESC dan MASUKKAN diganti dengan representasi Vim ^[ dan ^M masing-masing.

Anda juga dapat memuat makro ke dalam register. Pertama, salin konten makro dan tempel ke baris kosong di buffer. Kemudian ganti karakter khusus dengan representasi Vimnya dengan menggunakan Ctrl+v+ dan Ctrl+v+ dalam mode Sisipkan. Kemudian salin konten makro di register yang diinginkan, misalnya, daftar h dengan perintah ini:

"hy$

Selanjutnya, mari kita putar ulang makro untuk memperbarui baris yang tersisa dalam file.

Putar ulang makro

Setelah Anda merekam makro dan memverifikasi isinya, gunakan makro untuk melakukan pengeditan yang sama pada baris yang tersisa.

Untuk memutar ulang makro sekali, pindahkan kursor ke baris berikutnya dan tekan @h di mana h mewakili register tempat Anda menyimpan makro.

Perhatikan bahwa makro secara otomatis memindahkan kursor ke baris berikutnya sesuai kebutuhan. Ini memungkinkan Anda untuk mengulangi eksekusinya. Untuk mengulangi eksekusi makro, tekan @@ .

Terakhir, Anda dapat mengulangi makro pada semua baris yang tersisa dengan menggunakan Vim number sintaksis. Misalnya, untuk mengeksekusi makro pada lima baris yang tersisa, tekan 5@@ atau 5@j .

Ini bekerja dengan baik jika Anda tahu persis berapa kali Anda ingin mengeksekusi makro. Jika Anda ingin menjalankan makro di semua baris hingga akhir file, terlepas dari berapa banyak baris yang ada, gunakan sintaks ini:

:%:normal @h

Semua baris dalam file sekarang cocok dengan output yang diharapkan. Untuk menyelesaikan perubahan, hapus baris judul di awal.

Apa selanjutnya?

Makro Vim adalah sumber daya yang kuat yang memungkinkan Anda untuk memperluas fungsionalitas Vim dan menjalankan tugas-tugas kompleks dengan cepat.

Anda dapat melihat manfaat menjalankan makro dalam file dengan delapan baris. Bayangkan jika Anda diminta untuk melakukan hal serupa dalam file dengan ratusan atau ribuan entri. Anda bahkan dapat mengujinya dengan menyalin delapan baris ini dan menempelkannya ratusan kali, lalu menerapkan kembali makro.

Jika Anda menggunakan makro pada file dengan ribuan baris, lihat set lazyredraw perintah untuk meningkatkan kinerja. Pengaturan ini mencegah Vim menggambar ulang layar untuk setiap iterasi makro.

Membuat makro Vim mengharuskan Anda untuk berpikir dan menjalankan tugas dengan cara yang dioptimalkan. Ini adalah latihan yang baik saat menggunakan Vim untuk memikirkan cara melakukan tugas dengan cara yang membuatnya dapat diulang dan memungkinkan Anda mengonversinya menjadi makro bila diperlukan.

Dengan melakukan ini, Anda menjadi lebih mahir dengan Vim dan, sebagai gantinya, Anda mendapat manfaat dari fitur yang lebih canggih untuk meningkatkan alur kerja dan menghemat waktu.

[ Ingin tahu lebih banyak tentang Vim? Unduh lembar contekan Vim gratis ini. ]


Linux
  1. Temukan host langsung di jaringan di Linux

  2. Bagaimana Cara Menggunakan `yang` Pada Perintah Aliased?

  3. Pembungkus TCP kecuali opsi

  1. Cara menggunakan alat baris perintah sipcalc Linux

  2. Makro Vim Rekursif:Satu langkah lebih jauh untuk mengotomatisasi tugas yang berulang

  3. Apakah Mungkin Membuat Dan Menggunakan Menu Di Vim (berbasis terminal)?

  1. Bagaimana Cara Menggunakan Jenis File Di Vim?

  2. cara menggunakan pylint di vim

  3. Gunakan .vimrc dan .vim/ pengguna lain