Konfigurasi VIM(1) seperti Fariz part 1

Kalau bisa ribet kenapa harus sederhana?

Konfigurasi VIM(1) seperti Fariz part 1

Karena alasan tertentu—termasuk berurusan dengan remote server—saya mau tidak mau harus menggunakan vim sebagai penyunting teks dalam keseharian saya, selain karena kurang cocok dengan nano(1) juga karena enggak mungkin memasang sistem operasi emacs(1) hanya untuk melakukan penyuntingan teks.

Saya menggunakan Neovim atau nvim(1) versi 0.5.0 bukan vim biasa, karena seorang hipster. Jadi mungkin bila ada beberapa konfigurasi yang sepertinya tidak kompatibel dengan versi vim kamu, mohon untuk dimaafkan dan silahkan pakai nvim atuh.

Oke oke, sebagai catatan tambahan, disini saya menggunakan vim-plug sebagai plugin manager, dan kamu pastinya menggunakan itu juga, bukan?

Anyone here is still using Vundle?

Kita mulai dari pratinjau tampilan vim saya dulu.

nvim's Fariz

Ini adalah tampilan ketika membuka project Onivim 2 , yang menggunakan Reason sebagai bahasa pemrograman nya.

Disitu saya menggunakan color scheme vim-one, dan vim-polyglot untuk syntax highlighter nya.

Untuk startup time dalam membuka vim saya memakan waktu ~416ms dengan menggunakan parameter --startuptime ketika membuka vim.

# vim --startuptime

times in msec
 clock   self+sourced   self:  sourced script
 clock   elapsed:              other lines

000.011  000.011: --- NVIM STARTING ---
000.983  000.972: locale set
016.523  015.540: inits 1
016.556  000.033: window checked
016.563  000.007: parsing arguments
016.932  000.370: expanding arguments
017.012  000.079: inits 2
017.613  000.602: init highlight
017.860  000.246: waiting for UI
022.777  004.917: done waiting for UI
022.815  000.038: initialized screen early for UI
025.562  002.267  002.267: sourcing /Users/fariz/.local/share/nvim/site/autoload/plug.vim
040.613  000.036  000.036: sourcing /Users/fariz/.local/share/nvim/plugged/vim-prettier/ftdetect/css.vim
--- REDACTED ---
053.493  000.055  000.055: sourcing /Users/fariz/.local/share/nvim/plugged/rust.vim/ftdetect/rust.vim
--- REDACTED ---
053.717  022.145  010.911: sourcing /usr/local/share/nvim/runtime/filetype.vim
--- REDACTED ---
102.909  000.134  000.134: sourcing /Users/fariz/.local/share/nvim/plugged/coc.nvim/autoload/coc/rpc.vim
--- REDACTED ---
104.577  000.245  000.245: sourcing /Users/fariz/.local/share/nvim/plugged/coc.nvim/autoload/coc/client.vim
--- REDACTED ---
403.949  000.578  000.578: sourcing /usr/local/share/nvim/runtime/plugin/zipPlugin.vim
404.492  000.052  000.052: sourcing /usr/local/opt/fzf/plugin/fzf.vim
404.504  010.298: loading plugins
404.724  000.220: loading packages
405.059  000.335: loading after plugins
405.084  000.024: inits 3
411.199  006.115: reading ShaDa
411.434  000.235: opening buffers
412.880  000.212  000.212: sourcing /Users/fariz/.local/share/nvim/plugged/vim-gitgutter/autoload/gitgutter.vim
413.627  001.982: BufEnter autocommands
413.638  000.010: editing files in windows
414.060  000.422: VimEnter autocommands
414.064  000.004: UIEnter autocommands
414.840  000.319  000.319: sourcing /usr/local/share/nvim/runtime/autoload/provider/clipboard.vim
414.856  000.474: before starting main loop
416.458  001.602: first screen update
416.464  000.006: --- NVIM STARTED ---

Selengkapnya bisa dilihat disini.

Sepertinya ada beberapa hal yang bisa ditingkatkan, tapi untuk sekarang mari kita lanjut ke plugin-plugin yang digunakan.

NERDTree

Gue bukan penggemar netrw, selain karena menurut gue netrw bukanlah "File Explorer" atau yang setidaknya yang cocok dengan gue. Yang paling terkenal (sebagai pengganti netrw) adalah NERDTree, berikut perbedaannya:

KIRI netrw — KANAN NERDTree

Hal-hal yang gue suka dari NERDTree adalah:

  • Dukungan plugin! Disitu, gue menggunakan plugin nerdtree-git-plugin yang akan memberikan indikator bila ada perubahan terkait file yang ada
  • Bookmark! Cocok untuk berpindah-pindah project aktif tanpa effort lebih
  • Mengatur visibilitas "dotfiles", karena noise banget meskipun terkadang kita butuh
  • Intuitif, gue tau cara buka file di tab baru, secara vertikal/horizontal, menghapus/mengubah file, dsb

Sejauh ini yang gue butuhkan untuk "file manager/explorer" sudah terpenuhi di NERDTree, jadi, ya, silahkan gunakan juga bila sesuai dengan kebutuhan kamu juga.

COC

Manusia tempat salah dan lupa, maka dari itu terkadang kita membutuhkan bantuan compiler dalam membuat program untuk membantu menangkap kesalahan-kesalahan yang sekiranya bakal terjadi namun tidak ter-cover oleh kita.

Selain itu, kita juga kadang lupa seperti apa return dari function ini? apa yang dilakukan oleh function/method ini? Dan sebagainya.

Disinilah COC membantu kita, COC memberikan "intellisense" untuk bahasa pemrograman yang mendukung LSP (Language Server Protocol) yang memberikan bantuan dari auto-complete, "go to" definition, dan sebagainya.

What is VSCode?

Dan ini contoh lainnya:

Catch the bug, faster!

Jika yang sudah familiar dengan VSCode yang memiliki fitur "intellisense" sebagai fitur andalannya, di Vim kita bisa menikmati fitur itu juga dengan menggunakan plugin ini.

Commentary

Programming adalah tentang tradeoff, terkadang kita membuat "solusi sementara" untuk menyelesaikan masalah yang ada dan memiliki urgensi yang tinggi.

Dan ya, manusia adalah tempat salah & lupa, seringkali kita lupa mengapa kita melakukan ini dan itu. Dan solusinya, biasanya kita menulis TODO: di komentar, atau yang lebih ekstrim adalah dengan menjadikan baris kode yang ada menjadi komentar.

Tapi, bagaimana bila baris kode tersebut lebih dari 3 baris, alias, memakan banyak effort sekalipun menggunakan kombinasi Shift+I + <komentar> + ..

Demo (GIF)

Dengan menggunakan vim-commentary, ini bisa menjadi lebih mudah dengan cara selection (visual mode) + gc atau gue remap menjadi selection + ctrl + / biar kayak di teks editor sebelah.

Fugitive

Untuk yang menggunakan git sebagai version control, plugin ini sangat membantu untuk bisa melakukan operasi seputar git tanpa harus keluar dari vim ataupun mengeksekusi dengan !git <cmd>.

Gstatus + Git add + Glog + Gcommit (GIF)

Meskipun jarang banget ngelakuin git log tapi buat demonstrasi aja biar gif nya sedikit lebih lama. Tapi kadang ngelakuin juga sih kalau jenisnya ingin fix bug

GitGutter

Berkas apa aja sih yang gue ubah?

Nah, dengan vim-gitgutter kita bisa melihat perubahan tersebut tanpa harus keluar dari vim.

In Action (+ Gvdiffsplit from Fugitive)

Bisa lihat di kolom yang kanan ada indikator + sebagai perubahan yang berjenis "tambahan", ada ~ yang berarti modifikasi, dsb.

Di contoh diatas gue pakai Gvdiffsplit nya Fugitive untuk sekalian memperlihatkan perubahan yang terjadi dengan versi yang sebelumnya.

There's more!

Ini masih part 1, dan masih banyak lagi yang ingin gue bagikan. Jika kamu tertarik dengan paradigma kalau bisa ribet kenapa harus sederhana yang dalam konteks ini menggunakan vim daripada teks editor atau IDE mainstream, bisa follow akun twitter si Fariz untuk mendapatkan pembaruan (tapi kebanyakan shitpost sih) atau bisa subscribe ke RSS feed blog ini.

Sebagai pengingat, vim (dan teks editor lain ataupun IDE) hanyalah tools semata, yang membantu pekerjaan kita agar bisa lebih efektif & efisien diselesaikan.

Workflow ini cocok dengan preferensi gue (dan mencapai goals gue), dan bila sekiranya tidak cocok dengan preferensi kamu, just leave it! As simple as that.

Sampai jumpa ditulisan selanjutnya, terima kasih!