Vim : Menghapus Ekstra Spasi Di Akhir Baris

Ada kalanya saya perlu menghapus semua spasi kosong di akhir semua baris (trailing whitespace). Dengan Vim saya bisa gunakan perintah :

:%s/\s\+$//g

Misalnya saya punya berkas teks seperti ini :

Pada contoh di atas semua baris saya beri garis merah, ada spasi kosong pada bagian bergaris kuning. Saya ingin semua baris itu hilang. Dengan menggunakan perintah tadi semua spasi ekstra di akhir baris akan otomatis terhapus. Lihat contoh pada baris ketiga, kursornya langsung berada pada bagian akhir baris di huruf “D” pada kata “ENTITYID”.

Vim : Search & Replace

Fitur penting dari sebuah editor teks di antaranya adalah kemampuan cari & ganti (search & replace). Bayangkan repotnya bila harus mengganti banyak kata (atau frase) satu persatu. Di editor Vim, saya biasa gunakan perintah berikut ini bila ingin melakukan search & replace teks tertentu :

:%s/<pattern>/<replacement>/g   

<pattern> maksudnya kata/frase yang ingin saya ganti sementara <replacement> adalah kata penggantinya. Misalnya saya punya berkas teks yang berisi data koneksi Oracle database seperti contoh berikut ini :

Saya ingin ganti informasi Oracle SID dari uimdb menjadi uimdbsit. Dengan menggunakan Vim, saya bisa mengedit satu persatu berkas tersebut lalu menjalankan perintah :

:%/uimdb/uimdbsit/g

Lalu tinggal Save dengan perintah :wq. Tapi sayangnya cara ini tidak praktis bila ternyata saya punya banyak sekali berkas. Cara yang paling sering saya gunakan adalah dengan bantuan perintah find, perl seperti ini :

find . -name "*pola nama file*" -exec perl -pi -e 's/<pattern>/<replacement>/g' {}\;

Contoh saat digunakan seperti ini berikut ini :

Perintah di atas bisa dimodifikasi untuk memanfaatkan fitur-fitur yang dimiliki perintah find. Misalnya fitur -maxdepth di atas berguna untuk membatasi area pencarian. Tanpa menggunakan opsi -maxdepth maka semua berkas berakhiran *.xml dalam semua sub-directori akan ikut terkena perubahan tadi. Misalnya contoh di bawah ini, ada banyak berkas *.xml dalam 3 sub-direktori (ditunjukkan dengan garis merah).

Karena saya hanya ingin memodifikasi berkas *.xml yang berada tepat di bawah direktori jdbc, saya harus menggunakan opsi maxdepth 1. Opsi tersebut akan membatasi area pencarian pada direktori itu saja (current directory) tanpa menyentuh berkas *.xml lain dalam setiap sub-direktori.

Vim : Hapus Semua Baris Sesuai Pola Tertentu

Saat menyunting berkas teks dengan Vim, biasanya saya perlu cara cepat untuk menghapus semua baris yang mengandung pola (pattern) tertentu. Cara lama saya tinggal search polanya lalu hapus satu persatu barisnya dengan perintah dd. Tapi cara ini kurang praktis dan rentan error bila mata sudah lelah mungkin saya bisa melewatkan sejumlah baris. Shortcut yang saya temukan dari Internet adalah dengan menggunakan perintah ini :

:g/<pattern>/d

Singkat perintahnya, cukup awali dengan :g/, diikuti dengan pola yang ingin kita temukan, dan terakhir diakhiri dengan /d.

Contoh penggunaannya seperti ini beberapa tangkapan layar berikut ini. Misalnya saya sedang menyunting sebuah berkas PL/SQL & ingin menghapus semua baris yang memiliki kata-kata “execute immediate”.

Saya masuk dulu ke command mode dengan menekan tombol Escape beberapa kali, lalu saya tinggal gunakan perintah tadi :g/execute immediate/d seperti terlihat di bawah ini :

Maka otomatis semua baris dari bagian awal sampai akhir dokumen yang mengandung kata “execute immediate” otomatis terhapus.

Saya ingin kumpulkan semua postingan tentang Vim dengan Tag : Vim. Dengan mengumpulkan aneka shortcut seperti ini, saya merasa jadi lebih produktif untuk mengedit berkas teks dengan Vim daripada dengan menggunakan editor visual lainnya.

Vim : Folding

Setiap hari saya sering bekerja dengan menggunakan Vim, Vim adalah aplikasi editor teks berbasis CLI (command line interface). Beberapa waktu ini saya baru mempelajari satu lagi fiturnya Vim, fitur tersebut adalah folding. Folding di sini maksudnya menyembunyikan sementara bagian dokumen yang tidak ingin dibaca. Misalnya saya sedang menulis sebuah script PL/SQL, dan saya ingin menyembunyikan dulu bagian deklarasi variabel yang cukup panjang dan menyesaki layar. Pertama saya pindahkan kursor ke bagian awal dokumen yang ingin ditutup :

Lalu saya tekan kombinasi tombol Control & V untuk mengaktifkan mode visual :

Lalu saya gunakan tombol panah bawah untuk menandai semua bagian dokumen yang ingin saya sembunyikan :

Setelah menandai semua baris yang ingin disembunyikan, saya tekan tombol z dan f secara berurutan (zf). Secara otomatis Vim akan menyembunyikan semua baris tadi. Vim akan menampilkan indikator tanda +, diikuti dengan jumlah baris yang disembunyikan, serta tampilan baris awal yang disembunyikan seperti terlihat pada contoh di bawah ini :

Secara instan, 29 baris deklarasi variabel tersebut hilang tersembunyi dalam 1 baris saja. Dengan ukuran layar Terminal yang sama saya bisa melihat bagian script berikutnya.

Lalu bagaimana bila saya ingin memunculkan kembali semua baris tadi? Saya cukup mengarahkan kursor pada baris indikator tadi lalu menekan kombinasi tombol z dan o. Dan untuk menyembunyikan kembali baris-baris tersebut saya gunakan kombinasi tombol z dan c. Supaya mudah mengingat kombinasi tadi saya cukup hapalkan tombol pertamanya saja, cukup ingat tombol z untuk mulai menggunakan menu folding. Lalu ingat f untuk fold, o untuk open fold, dan c untuk close fold

Canggihnya lagi, semua pengaturan fold tadi bisa disimpan dengan menggunakan perintah mkview. Dengan menggunakan perintah mkview saya tidak perlu repot-repot menyembunyikan baris-baris tadi setiap saat membuat dokumen tersebut. Tanpa menggunakan mkview, setiap kali membuka dokumen yang sama saya perlu mengatur lagi bagian-bagian mana yang ingin saya sembunyikan.

Misalnya saya membuka lagi dokumen tersebut, saya cukup gunakan perintah loadview untuk mengaktifkan semua pengaturan yang sudah saya buat sebelumnya :

Tips ini saya temukan di website http://vim.wikia.com/wiki/Folding. Tips ini sangat berguna saat menggunakan Vim untuk mengolah dokumen (atau script) yang cukup panjang. Layar jadi tidak lagi disesaki dengan bagian yang sedang tidak kita perlukan. Menghemat waktu memindahkan kursor naik turun dokumen. Kita jadi bisa fokus pada salah satu bagian saja & menyembunyikan bagian lain untuk sementara waktu.

Vim : Column Mode Edit

Salah satu fitur yang paling saya suka dari Vim adalah kemampuannya melakukan column mode edit. Saya pertama kali kenal fitur edit kolom ini dari UltaEdit (teks editor untuk Windows).

Vim menyebut mode edit kolom ini sebagai mode Visual Block.

Fitur ini sangat berguna antara lain untuk :

  • menyisipkan huruf/kata/kalimat yang sama pada beberapa baris sekaligus
  • menghapus huruf/kata/kalimat secara bersamaan pada beberapa baris sekaligus
  • menghapus beberapa baris teks sekaligus

Kata kuncinya adalah sekaligus; mempersingkat pekerjaan yang berulang untuk mengedit sebuah text file.

Yang paling sering saya gunakan misalnya menyisipkan tanda # pada beberapa baris sekaligus. Di beberapa bahasa pemrograman, seperti Bash script, tanda # dipakai untuk menandai baris-baris komentar (comments). Baris yang diawali dengan tanda # berarti dianggap bukan bagian utama program tersebut. Maka ada istilah comment out yang berarti menambahkan tanda # pada baris program untuk menjadikannya sebagai komentar. Dan sebaliknya ada juga istilah uncomment yang menunjuk pada penghapusan tanda #, mengubah komentar menjadi bagian utama dari program.

Biasanya saya perlu itu untuk mengabaikan dulu sementara beberapa baris program, bukan bermaksud menjadikannya sebagai komentar. Bisa dibayangkan bila ada puluhan/ratusan baris yang harus di-“comment out”, berapa kali saya harus mengetikkan tanda #. Nah dengan mode edit kolom tadi menambahkan tanda # jadi mudah, cukup dengan satu kali ketik & semua baris akan kena efeknya.

Berikut adalah contoh penggunaan mode Visual di Vim untuk menyisipkan teks pada beberapa baris sekaligus.

  1. Misalnya saya sedang mengedit file .bashrc. Saya ingin comment out fungsi converttohex seperti yang ditunjukkan pada tangkapan layar berikut ini :
  2. Yang pertama saya lakukan adalah tekan tombol Esc lalu ikuti dengan Control v.

    Akan muncul indikator “– VISUAL BLOCK –” di bagian bawah Vim.
  3. Lalu saya bisa menggunakan tombol panah atas/bawah untuk memilih baris mana saja yang akan saya edit.

    Pada contoh di atas saya ingin menyisipkan tanda # di awal setiap baris fungsi converttohex.
  4. Langkah berikutnya saya perlu menekan tombol Shift i untuk mulai menyisipkan teks. Setelah itu akan muncul indikator “– INSERT –” di bagian bawah Vim.

    Saat menggunakan Vi atau Vim, kita menggunakan tombol “i” (huruf i kecil) untuk mulai mengetikkan teks. Tapi saat sedang berada pada VISUAL BLOCK, kita harus menggunakan huruf I besar (tekan tombol Shift dan huruf i bersamaan) bila ingin mulai mengetikkan teks.
  5. Saya tinggal ketikkan tanda # sekali saja.

    Hmm, padahal tadi saya ingin menambahkan tanda # di beberapa baris sekaligus..kok yang muncul di layar hanya 1 tanda # di baris pertama?
  6. Langkah berikutnya adalah menekan tombol Esc. Ajaibnya begitu saya tekan tombol Esc, tanda # tadi muncul di semua baris yang sudah saya pilih :

Prinsip yang sama bisa dipakai untuk menghapus beberapa kata sekaligus seperti ini :

  1. Tekan tombol Control v lalu blok kolom yang ingin dihapus (gunakan tombol panah atas-bawah-kiri-kanan untuk memilih teksnya) :
  2. Lalu tekan tombol x untuk menghapus kolom yang sudah diblok tadi :

Kira-kira seperti itu cara menggunakan Vim dengan mode Visual Block untuk menambahkan atau menghapus teks pada beberapa baris sekaligus.