Konfigurasi VIM(1) seperti Fariz part 1
Kalau bisa ribet kenapa harus sederhana?

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.

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:

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.

Dan ini contoh lainnya:

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> + .
.

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>
.

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.

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!