Neovim

Cara Membuat Peta Kunci Kustom di Neovim Dengan Lua

Pelajari cara membuat pengikatan kunci khusus di Neovim menggunakan runtime Lua bawaan opsional. Dan tinggalkan VimScript kuno & samar demi kebaikan Lua!

Neovim (atau bahkan Vim) adalah perangkat lunak luar biasa untuk pengembang mana pun di luar sana. Kemampuan untuk membuat keybinding khusus & melakukan hampir semua hal
merupakan bukti popularitas Vim. Dan jika Anda pernah menggunakan Vim sebelumnya, Anda harus
menyadari apa yang mungkin terjadi melalui pengikatan kunci Vim khusus juga.

Bagi yang belum tahu, keterbukaan Vim terhadap pembuatan keybinding khusus
hampir tidak ada persaingannya. Oleh karena itu, hanya imajinasi Anda yang
membatasi apa yang dapat Anda buat menggunakan pengikatan tombol khusus.

Pengguna Vim juga diharuskan memiliki pengetahuan tentang Vimscript (yang merupakan bahasa skrip yang dibuat untuk konfigurasi Vim). Ini bukan bahasa
paling elegan yang pernah ada & juga tidak ada gunanya di luar Vim. Bagi banyak
Anda, investasi waktu dan upaya yang diperlukan untuk menggunakan bahasa pemrograman yang berlebihan mungkin juga tidak produktif. Untungnya, Neovim v0.5+ memberikan pembaruan signifikan kepada komunitas untuk digunakan & itulah runtime Lua bawaan.

Runtime opsional Lua juga kompatibel dengan versi sebelumnya yang berarti Anda masih dapat mencoba runtime opsional langsung dari dalam Vimscript. Kami tidak akan membahas cara menulis kode Lua dalam Vimscript karena ini di luar cakupan artikel ini. Namun jangan ragu untuk merujuk ke Panduan Neovim-Lua yang menakjubkan ini di GitHub untuk referensi cepat.

Jika hal tersebut menggugah minat Anda & Anda ingin terus belajar tentang bagaimana
membuat keybind khusus di Neovim adalah pengalaman yang sangat menyenangkan, maka bacalah
selanjutnya. Artikel selanjutnya dimulai dengan pengenalan singkat tentang runtime Lua
opsional, diikuti dengan membuat fungsi Lua untuk memetakan keybind kustom. Dan menjelang akhir semuanya, kami akan menyarankan sumber daya lebih lanjut yang mungkin ingin Anda lihat untuk mempelajari runtime Lua Neovim dengan lebih baik.

Memperkenalkan Waktu Proses Lua Opsional

Sebelum kita melangkah lebih jauh ke dalam artikel ini, mari kita perkenalkan secara singkat runtime
Lua di Neovim. Memiliki gambaran tentang hal ini akan membantu lebih memahami bagaimana & apa yang mungkin untuk dibuat.

Konon, Neovim dirilis dengan serangkaian beberapa fitur berguna. Salah satu fitur
yang membuat Neovim menonjol adalah API bawaannya. Akses terprogram ke API & runtime Lua berarti Anda dapat membiarkan imajinasi Anda menjadi liar jika Anda menginginkannya.

Dan asal tahu saja, seperti file konfigurasi lainnya yang digunakan untuk meretas Neovim/Vim, kode Lua juga perlu ditempatkan di runtimepath (lihat “:h rtp” untuk info lebih lanjut). File konfigurasi ini (dengan ekstensi .lua) ditempatkan di dalam
direktori yang diberi nama lua. Dan Neovim akan mengambil semua yang ada di dalam
direktori tersebut ketika dipanggil.

Perhatikan, lokasi runtimepath Neovim bervariasi tergantung pada pilihan OS Anda. Jadi, bagi pengguna Linux di luar sana, periksa apakah OS Anda mengikuti spesifikasi
XDG Base Directory, maka file Lua biasanya tersedia di: $HOME/.config/nvim/lua . Dan sesama pengguna Windows di luar sana, Anda harus memeriksa file Lua di %LOCALAPPDATA%\nvim\lua.

Untuk info lebih lanjut tentang di mana menempatkan file konfigurasi, lihat bagian
Di mana meletakkan file Lua” dari Panduan Neovim-Lua di GitHub.

Dengan sedikit perkenalan kita pada runtime Lua opsional, mari
lihat cara mengkonfigurasi keybinding Neovim dengan Lua. Dalam beberapa
bagian berikutnya kita akan melihat, menulis sebuah contoh fungsi Lua diikuti dengan
wrapper fungsional sebenarnya di Lua. Pembungkus fungsional ini akan digunakan untuk membuat pengikatan kunci khusus kami di mana pun & kapan pun diperlukan.

Cara Menulis Fungsi Lua untuk Ikatan Kunci Neovim

Dulu ketika Neovim belum ada, Vim menyediakan perintah remap (dan noremap untuk pemetaan ulang non-rekursif ) untuk menyesuaikan & memetakan ulang ikatan kunci. Oleh karena itu, merupakan hal yang lumrah melihat perintah nnoremap tersebar di seluruh file .vimrc seseorang. Ini salah satu file
contoh .vimrc yang saya ambil dari Internet. Filenya sangat besar (~1200 baris kode!), berat dan sulit dikelola.

Dan berikut sedikit cuplikan kode yang saya ambil dari file .vimrc di atas.

Untungnya bagi kami, Neovim menyediakan fungsi pembantu melalui API bawaannya.
Dinamakan dengan tepat nvim_set_keymap(), pengguna diharapkan menggunakan fungsi ini
secara langsung atau dengan membungkusnya dalam kode Lua. Metode selanjutnya direkomendasikan karena dengan demikian praktik pengkodean standar dapat dipatuhi. Menggunakan kode Lua bersama-sama dengan Neovim API juga membantu dalam memodulasi konfigurasi. Sehingga membuat perawatan lebih mudah & menjaga kewarasan Anda tetap utuh.

Penggunaan fungsi wrapper juga memastikan konfigurasinya “” & “SOLID»”. Mengikuti praktik standar pengembangan umum berarti konfigurasinya juga terlihat bersih & terorganisir.

Jadi seperti apa konfigurasi Neovim pada umumnya ketika digunakan dengan Lua?
Berikut contohnya:

Pada pandangan pertama, kode Lua mungkin tampak terlalu bertele-tele tetapi ini merupakan hal yang baik
yang akan Anda lihat segera.

Dalam cuplikan kode Lua yang kami bagikan di atas, kami mendefinisikan sebuah fungsi yang disebut map(). Ia menerima empat parameter yaitu:

  1. mode (seperti dalam mode Vim seperti mode Normal/Sisipkan)
  2. lhs (keybind khusus yang Anda perlukan)
  3. rhs (perintah atau keybind yang ada untuk disesuaikan)
  4. opts (opsi tambahan seperti ‹silent›/‹noremap›, lihat :h map-arguments untuk info lebih lanjut tentangnya)

Secara default, parameter opts dari fungsi map() ditetapkan ke tabel
{ noremap = benar }. Dengan demikian, penggunaan pemetaan bertingkat dan rekursif diperbolehkan (lihat :h map-commands untuk informasi selengkapnya). Anda bisa memperluas tabel optslebih jauh dengan argumen-peta tambahan sesuai kebutuhan. Dan inti dari pembungkusnya adalah fungsi vim.api.nvim_set_keymap() yang menerima daftar parameter yang disebutkan di atas.

Fungsi ini kemudian dapat digunakan kembali dimanapun Anda membutuhkannya. Seperti yang akan Anda lihat di
berikutnya, kami dapat memodulasi konfigurasi Neovim kami lebih jauh lagi!

Menggunakan Fungsi Lua di Seluruh File Runtime Neovim

Fungsi wrapper yang kita gunakan pada bagian di atas memang membantu dalam mengkustomisasi
pemetaan ulang Vim default. Namun mendefinisikan fungsi wrapper & kemudian menggunakannya langsung dalam file init.lua kami tidak mematuhi prinsip DRY dan/atau SOLID sama sekali. Untuk membuat konfigurasi lebih sesuai dengan praktik pengembangan standar, kami akan menggunakan Modul Lua. Penggunaan Modul Lua memastikan adanya pemisahan logika yang jelas dalam konfigurasi kami.

Dan jika Anda memerlukan penyegaran tentang cara membuat Modul Lua untuk Neovim, rujuk ke
bagian “Modul” dari Panduan Neovim-Lua di GitHub.

Oleh karena itu, buatlah “utils.lua di bawah direktori “lua” di runtimepath Anda.
Modul Lua diidentifikasi jika berisi baris kode berikut:

Penjelasan tentang Modul Lua juga berada di luar cakupan artikel ini, jadi mungkin merujuk pada dokumentasi Lua 5.1 yang ditautkan di atas untuk referensi.

Untuk kasus penggunaan kami, Modul Lua yang kami definisikan akan berisi pembungkus fungsional untuk ikatan kunci khusus. Dengan demikian, isi modul “utils.lua akan terlihat seperti ini:

Karena Neovim mengambil & memuat semua file Lua yang terletak di bawah direktori `lua` di jalur runtime, fungsi map() kami juga akan tersedia untuk diimpor di tempat lain. Oleh karena itu, sekarang Anda cukup mengimpor wrapper ke file “init.lua Anda & menggunakannya untuk membuat peta ulang Anda. Dengan demikian, kini Anda dapat menjaga file tetap bersih, mudah dirawat, dan dimuat dengan cepat.

Berikut cara menulis ulang file “init.lua” dengan mengimpor “map()
fungsi dari modul “utils”;

Sekarang kode telah dimodulasi dengan benar, pemeliharaan tidak lagi menjadi tugas berat dan kemungkinan terjadinya kerusakan akan jauh lebih rendah. Selanjutnya, jika Anda ingin memperluas fungsi dasar map() kami, semudah membuat perubahan yang diperlukan pada “utils” modul!

Meskipun demikian, kemungkinannya adalah, jika Anda telah menggunakan Neovim selama beberapa waktu, Anda belum
memigrasikan konfigurasi Anda ke kode Lua. Dan Anda akan senang mendengar bahwa para pengembang Neovim berusaha keras untuk mempertahankan kompatibilitas ke belakang. Jika membuat perubahan migrasi dari Vimscript ke kode Lua untuk konfigurasi yang ada membuat Anda tidak nyaman, jangan khawatir. Anda bahkan dapat menggunakan kode Lua langsung di dalam Vimscript juga! Untuk itu, lihat “:h heredocs” untuk informasi selengkapnya tentang topik tersebut.

Untuk membantu Anda mengetahui cara melakukan migrasi konfigurasi yang ada,
bagian berikutnya akan menyarankan beberapa referensi berguna yang dapat Anda lihat.

Kata-kata Terakhir & Hal-Hal yang Dinantikan

Runtime Lua opsional dalam Neovim adalah anugerah & ini juga merupakan salah satu fitur yang membuat Neovim sangat menonjol dibandingkan Vim. Namun karena fitur & Neovim sendiri relatif baru, sumber daya seputar fitur ini sulit didapat. Oleh karena itu, berikut adalah beberapa sumber yang mungkin ingin Anda lihat jika mengkonfigurasi Neovim dengan Lua menarik minat Anda.

  1. Panduan Menggunakan Lua di Neovim
  2. h: lua»” untuk panduan komprehensif tentang cara menggunakan Lua dalam Neovim.
  3. Dan sedikit malu, Anda juga bisa menggunakan blog saya sebagai sumber referensi. Saya telah menulis salah satu artikel yang memperkenalkan manfaat menggunakan Lua untuk Neovim di Vim atau Neovim? Inilah Mengapa Anda Harus Menggunakan Yang Terakhir. Masih banyak lagi artikel serupa yang akan datang, jadi perhatikan baik-baik.

Apakah saya melewatkan sumber daya bermanfaat lainnya? Beri tahu saya jika saya melakukannya!

Dan sebagai penutup artikel ini, apa pendapat Anda tentang penggunaan Lua untuk mengkonfigurasi
Neovim? Apakah konfigurasi Anda saat ini dalam Vimscript atau Lua? Dan apakah Anda memperhatikan adanya perbedaan saat menggunakan keduanya?

Kirimi saya DM di Twitter Jarmosan atau email mana pun yang Anda suka.