Cara Belajar Helix Editor, Alternatif untuk Neovim dan Vim

Helix merupakan teks editor CLI dengan dukungan modal alternatif Neovim dan VIM. Editor ini dibuat menggunakan bahasa pemrograman rust sehingga lebih cepat performanya dengan single binary.

Fitur unggulan

Helix memiliki konfigurasi minimalis. Tidak seperti Neovim dan VIM yang diharuskan memanajemen konfigurasinya dengan memasang plugin-plugin agar sesuai workflow yang diharapkan. Berikut daftar fitur yang dimiliki oleh helix yang dikutip di halaman resminya:

  • Seleksi banyak plihan secara bersama. Pengeditan kode multi-kursor secara bersamaan sudah built-in di helix.
  • Integrasi dengan Tree-sitter. Mengaktifkan syntax highlighting, kalkulasi indent dan navigasi kode.
  • Manipulasi kode. Mudahnya navigasi dan penyeleksian fungsi, kelas, komentar, dan sebagainya.
  • Dukungan Language server. Dengan spesifik bahasa autokomplit, menuju definisi, dokumentasi, diagnosa, dan fitur IDE tanpa konfigurasi tambahan.
  • Dibangun dengan bahasa pemrograman rust. Performa yang tinggi dan lebih hemat daya baterai.
  • Builtin fitur. Fitur pencarian fuzzy untuk perncarian berkas, simbol, projek, tema, fugitive, surround dan masih banyak lagi.
matplotlib-sample
Gambar: Pemrograman dengan Helix Editor

Helix sudah dilengkapi dengan berbagai fitur termasuk syntax highlight yang memudahkan bagi Platform Engineer (Wyssmann, Adrian).

Shock therapy

Ketika menggunakan helix mau tidak mau harus belajar lagi. Meskipun menggunakan konfigurasi yang minimalis, helix memiliki keymap yang 30% berbeda dengan neovim/vim dan harus dihafal agar terbiasa. Selebihnya keymap lain hampir sama. Beruntungnya developer helix sudah memberikan tutorial yang sudah built-in seperti vimtutor di vim.

hx --tutor

Terlebih lagi tidak perlu memikirkan bagaimana konfigurasi LSP di Helix, karena sudah terkonfigurasi dengan baik. Jika menggunakan vim/neovim, terlalu banyak vimscript yang perlu diurus semuanya. Sedangkan di Helix pengecekan dapat dilakukan dengan hx --health markdown dan lihat LSP apa saja yang perlu dipasang (Hårek, Tim).

Pemasangan

OpenBSD

doas pkg_add install helix

FreeBSD

doas pkg install helix

Panduan pemasangan selengkapnya bisa merujuk ke halaman Dokumentasi.

Penggunaan dasar

Arah navigasi kursor

Seperti navigasi di vim, helix menggunakan h, j, k, dan l untuk memindahkan kursor. Menggunakan keymap arah panah juga bisa, tetapi menggunakan hjkl lebih cepat.

KeyDescription
hKiri
jBawah
kAtas
lKanan

Membuka berkas

Membuka helix dengan menjalankan hx.

hx

Membuka dengan berkas tertentu.

hx filename.xyz

Helix juga memiliki mode normal, insert, dan visual seperti vim. Beberapa pintasan mode normal berikut masih umum dan kompatibel dengan helix.

CommandDescription
:qMenutup berkas dan aplikasi.
:q!Menutup aplikasi secara paksa.
:qa!Menutup semua buffer yang terbuka dan aplikasi secara paksa.

Buffer Merupakan berkas atau direktori yang telah terbuka.

Konfigurasi

Beberapa konfigurasi dasar yang mungkin perlu ditambahkan. Misalnya jenis tema dan nomer baris.

CommandDescription
:theme tokyonightMengganti tema.

Konfigurasi permanen bisa membuka config.toml.

CommandDescription
:config-openMembuka konfigurasi helix.
:config-reloadMemuat ulang konfigurasi helix.
theme = "tokyonight"

[editor]
line-number = "relative"
cursorline = true

[editor.lsp]
display-messages = true

Yap, benar. Konfigurasi tambahan hanya beberapa baris diatas. Selengkapnya dapat merujuk ke halaman konfigurasi.

Jika anda bekerja dengan proyek yang cukup besar. Disarankan mengaktifkan multiple agar helix menampilkan tab secara bawaan meskipun bukan single file (Frere, Jonathan).

[editor]
bufferline = "multiline"

Penggunaan lanjutan

Menghapus karakter

Berbeda dengan vim, menghapus karakter di helix menggunakan keymap d.

KeyDescription
dMenghapus 1 karakter.

Memasukkan karakter

Sama halnya dengan vim, mode insert tetap menggunakan i.

KeyDescription
iMode insert.
escMode normal (keluar dari mode insert).

Menyimpan berkas

CommandDescription
:wMenyimpan berkas di buffer saat ini.
:w filename.xyzMenyimpan berkas di buffer dengan nama tertentu.

Bisa dikombinasikan dengan q untuk keluar dari helix.

CommandDescription
:wqMenyimpan dan menutup aplikasi.
:wqaMenyimpan dan menutup semua buffer.

Mode insert

Seperti yang telah diketahui sebelumnya, keymap i untuk mode insert tepat sebelum kursor. Sedangkan ada beberapa keymap lainnya seperti:

KeyDescription
iMode insert sebelum kursor.
aMode insert setelah kursor.
shift+iMode insert di awal baris.
shift+aMode insert di akhir baris.

Membuka baris baru

KeyDescription
oMode insert setelah baris saat ini.
shift+oMode insert sebelum baris saat ini.

Perintah diatas mirip di neovim atau vim.

Perpindahan dan seleksi

Perpindahan dan penyeleksian di helix dilakukan secara otomatis dan bersamaan. Sedikit berbeda dengan vim.

KeyDescription
wPindah dan menyeleksi 1 kata, termasuk spasinya.
ePindah dan menyeleksi 1 kata dari kursor sampai di akhir karakter kata.
bPindah dan menyeleksi 1 kata dari kursor sampai di awal karakter kata.

keymap shift+w, shift+e, dan shift+b juga memiliki fungsi yang serupa, hanya saja perpindahannya tergantung dari whitespace seperti spasi dan tab.

Perpindahan dengan hitungan

Pindah dengan hitungan juga dapat dilakukan, misalnya 2w, 4e, 5b. Penjelasannya seperti ini:

KeyDescription
2wPindah 2 kata ke depan.
4ePindah 4 kata ke depan yang diakhiri di akhir kata.
5bPindah 5 kata ke belakang.

Mengubah karakter

Pintasan yang digunakan yaitu keymap r.

KeyDescription
cMengubah karakter atau kata/kalimat yang terseleksi.

Misalnya menyeleksi kata dengan w, lalu ganti dengan keymap c, langsung masuk ke mode insert.

Mode visual/seleksi

Mode visual di helix hampir sama seperti di vim.

KeyDescription
vMode visual.
v again, or escMode normal (keluar dari mode visual).

Menyeleksi baris

Menyeleksi baris menggunakan keymap x, jika ingin menyeleksi baris selanjutnya tekan x lagi. Kadang kala niatnya ingin menghapus suatu karakter, tetapi menjadi seleksi di helix. (akibat alam bawah sadar terbiasa menggunakan x untuk menghapus karakter di vim.)

KeyDescription
xMenyeleksi 1 baris.
5Menyeleksi 5 baris.
;Melepaskan seleksi baris.
alt+;Membalikkan/flip seleksi baris.

Pembatalan perubahan

Perintah untuk membatalkan perubahan:

KeyDescription
uUndo
shift+uRedo.

Ulangi beberapa kali hingga perubahan sesuai dengan yang diharapkan.

Penyalinan dan penempelan

Menyalin di helix dapat dilakukan di internal helix maupun di sistem clipboard.

KeyDescription
yYank/copy, menyalin karakter yang terseleksi.
pPaste, menempelkan hasil salinan.
shift+pPaste, menempelkan hasil salinan ke posisi sebelum kursor.

Dapat dilakukan juga dengan perhitungan untuk menentukan jumlah salinan/tempelan.

KeyDescription
2 y2x Yank/copy, menyalin karakter yang terseleksi.
4 p4x Paste, menempelkan hasil salinan.
10 shift+p10x Paste, menempelkan hasil salinan ke posisi sebelum kursor.

Pada dasarnya keymap d (menghapus karakter) dan c (mengubah karakter) juga dapat dikatakan mode yank, yang mana hasil karakter yang dihapus/diubah disimpan di buffer sehingga dapat dilakukan perintah tempel (paste) p atau shift+p.

Untuk menghindari penyimpanan di buffer, gunakan alt+d atau alt+c. Sedangkan untuk menyalin atau menempelkan dari sistem clipboard, gunakan keymap dibawah ini.

KeyDescription
spaceyCopy/menyalin dari sistem.
spacepPaste/menempelkan dari sistem.

Pencarian karakter

Mencari karakter seperti di vim atau neovim.

KeyDescription
/Mencari karakter/kata.
nMenuju hasil pencarian selanjutnya.
nMenuju hasil pencarian ke sebelumnya.
?Mencari karakter/kata secara mundur.

Tidak seperti di vim, di helix jika melakukan pencarian dengan shift+/ arah n tetap kedepan dan shift+n ke belakang/sebelumnya.

Kursor ganda

Menambahkan kursor sangat berguna untuk mengubah karakter secara bersamaan. Misalnya untuk menghapus, mengganti, dan fungsi regex.

KeyDescription
shift+cMencari karakter/kata.
shift+alt+cMenuju hasil pencarian selanjutnya.
,Menuju hasil pencarian ke sebelumnya.

Memilih dari hasil seleksi

Hal ini bertujuan untuk mengganti suatu karakter atau teks yang sudah diseleksi. Biasanya untuk menggantikan kata, semacam fungsi sed regex di vim.

KeyDescription
sMemilih karakter yang cocok sesuai yang diseleksi.

Misalnya pola kerjanya seperti ini, seleksi dengan s beberapa kali atau % untuk semua baris. tekan s lalu masukkan karakter yang dituju, tekan enter. Secara otomatis menjadi multi kursor. Selanjutnya dapat diubah sesuai keinginan.

Seleksi tambahan dengan regex

Penyeleksian ini dapat menggunakan tanda plus + saat menggunakan keymap s di area seleksi. Misalnya: spasi dan plus +.

Meluruskan dari seleksi

KeyDescription
&Meluruskan hasil seleksi.

Misalnya ada baris seperti ini.

 * 98) lorem
 * 99) ipsum
 * 100) dolor
 * 101) sit
 * 102) amet

Menjadi:

 *  97) lorem
 *  99) ipsum
 * 100) dolor
 * 101) sit
 * 102) amet

Membagi seleksi ke sebuah baris

KeyDescription
alt+sUntuk membagi menjadi pilihan di setiap baris. Umumnya digunakan untuk meluruskan tabel.
    | FRUIT   | AMOUNT |
    |---------|--------|
 | Apples  | 8      |
    | Bananas | 6      |
  | Oranges | 3      |
     | Donuts  | 4      |

Menjadi:

     | FRUIT   | AMOUNT |
     |---------|--------|
     | Apples  | 8      |
     | Bananas | 6      |
     | Oranges | 3      |
     | Donuts  | 4      |

Menyeleksi sampai ke karakter tertentu

KeyDescription
fMenyeleksi baris hingga tepat sampai ke karakter yang dituju.
tMenyeleksi baris hingga sampai ke karakter yang dituju, kursor tidak sampai ke karakter.

shift+f dan shift+t juga memiliki fungsi serupa, hanya saja melewatidi titik whitespace spasi atau tab.

Mengganti karakter atau kata

KeyDescription
rMenempelkan dengan karakter khusus.
shift+rMenempelkan dengan hasil salinan dari buffer atau dari system clipboard.

Pengulangan

Pengulangan dapat dilakukan untuk mengulang perintah yang sama, atau mengulang hasil pencarian f dan t sebelumnya.

KeyDescription
.Mengulangi hasil mode insert sebelumnya.
alt+.Mengulangi perintah dari hasil f atau t sebelumnya.

Mengganti teks dari salinan yank/clipboard

Setelah ada salinan teks baik berupa yank atau dari sistem clipboard, dapat digunakan untuk mengganti teks lain jika sudah diseleksi.

KeyDescription
shift+rMengganti teks yang terseleksi dengan hasil salinan yank/clipboard.

Menggabungkan baris

Beberapa baris perlu diseleksi dahulu dengan x, kemudian tekan shift+j.

KeyDescription
shift+jMenggabungkan beberapa baris yang sudah diseleksi.

Indentasi baris

Indentasi pada baris saat ini atau baris yang diseleksi.

KeyDescription
>Indentasi menjorok ke luar/kanan.
<Indentasi menjorok ke dalam/kiri.

Penambahan dan pengurangan

Penambahan dan pengurangan nilai (incrementing & decrementing) dapat dilakukan di helix. Biasanya dilakukan untuk mengubah nilai pada daftar.

KeyDescription
aMenambahkan nilai.
xMengurangi nilai.

Sebagai contoh:

1) list a
3) list b
4) list c
5) list d
6) list e

Menjadi,

1) list a
2) list b
3) list c
4) list d
5) list e

Fungsi Register

Berfungsi untuk menyimpan hasil salinan yang berbeda-beda, tetapi dapat dipanggil suatu saat. Berbeda dengan yank biasa yang hanya menyinpan 1 penyimpanan saja. Sedangkan dengan register mampu menyimpan hasil salinan yang banyak dan berbeda.

Sebagai contoh register:

  • kondisi a: menyalin kalimat satu
  • kondisi b: menyalin kalimat dua
  • kondisi c: menyalin kalimat tiga

Ada 3 kondisi yang terdiri dari a, b, dan c. Maka untuk menyimpan register tersebut dengan perintah:

KeyDescription
shift+' a yMenyimpan (yank) salinan ke register a.
shift+' b yMenyimpan (yank) salinan ke register b.
shift+' c yMenyimpan (yank) salinan ke register c.

Setelah disimpan, selanjutnya menempelkan teks dari suatu register.

KeyDescription
shift+' a pMenempelkan (paste) teks dari register a.
shift+' b pMenempelkan (paste) teks dari register b.
shift+' c pMenempelkan (paste) teks dari register c.

Hasil salinan tersebut juga dapat digunakan untuk mengganti teks yang sudah diseleksi.

KeyDescription
shift+' a rMengganti (replace) teks dari register a.
shift+' b rMengganti (replace) teks dari register b.
shift+' c rMengganti (replace) teks dari register c.

Fungsi Macro

Berguna untuk menyimpan langkah-langkah perintah ke dalam suatu register (default @).

KeyDescription
shift+q rMemulai perekaman macro.
shift+q rMenghentikan perekaman macro.
q rMenjalankan fungsi macro.
5q rMenjalankan fungsi macro selama 5 kali, bisa diganti dengan nq.

Pencarian dengan penyeleksian

Mencari teks yaitu menggunakan / lalu mengetik kata yang ingin dicari. Selain dengan mengetikkan karakter, cara lain yaitu dengan menyeleksi karakter sebagai karakter pencarian.

Setelah menyeleksi sebuah karakter kata misalnya dengan w/e/b, tekan * untuk menyimpan sebagai register pencarian. Kemudian kata tersebut dapat dicari dengan n atau shift+n.

KeyDescription
*Menyimpan hasil seleksi ke dalam register pencarian {/.

Menggunakan Jumplist

Dengan daftar lompat memungkinkan untuk menyimpan posisi kursor di posisi tertentu.

KeyDescription
ctrl+sMenyimpan jumplist.
ctrl+oJumplist selanjutnya.
ctrl+iJumplist sebelumnya.

Memutar dan menghapus seleksi primer

Setelah menyeleksi, mungkin adakalanya beberapa seleksi tidak perlu diikutkan. Dengan menggunakan alt+,, hasil seleksi yang terpilih bisa dihapus.

KeyDescription
)Menuju primer seleksi selanjutnya.
(Menuju primer seleksi sebelumnya.
alt+,Menghapus primer seleksi utama.

Mengganti huruf besar/kecil

Mengganti huruf kapital (uppercase) ke huruf kecil (lowercase) dapat menggunakan `, sedangkan huruf besar menggunakan alt+`.

KeyDescription
` or alt+` >}}Mengganti ke huruf kecil atau besar.
~Membalikkan jenis huruf besar ke kecil dan sebaliknya.

Memisahkan seleksi dengan pattern regex

Memisahkan seleksi mempunyai kondisi studi kasus khusus, misalnya ingin membuat huruf kapital suatu kalimat, memisahkan penggabungan baris menjadi beberapa baris, dan kondisi lain yang diharuskan untuk memisahkan kata/kalimat yang sudah diseleksi.

Gambaran umum langkahnya seperti berikut ini.

  • Seleksi baris, bisa menggunakan x, w, e, atau b.
  • Tekan shift+s untuk seleksi split.
  • Pilih pattern regex. Misalnya dipisah melalui tanda titik spasi . , tanda seru spasi ! , tanda tanya spasi ? . Pakai spasi biasanya kalimat selalu dipisahkan dengan tanda pemisah dan spasi. Jadi, pemulisan regexnya adalah \. |! |\?. Titik dan tanda tanya perlu diawali backslash \.
  • Pilih posisi kursor bisa didepan atau dibelakangnya kalimat terpisah. Cara memindahkannya dengan alt+;.
  • Dalam mode multi kursor, ganti perubahan yang diinginkan dengan r, c, atau i.

Sebagai contoh, ada 3 kalimat. pisahkan dan beri huruf kapital didepan.

belajar bahasa pemrograman! python adalah bahasa pemrograman tingkat tinggi? diciptakan oleh guido van rossum.

Menjadi:

Belajar bahasa pemrograman!
python adalah bahasa pemrograman tingkat tinggi?
Diciptakan oleh guido van rossum.
Video: Helix Regex

Bagian 5: Penutup

Helix sangat tepat digunakan karena menggunakan minimal konfigurasi yang sudah tersedia autokomplit, fuzzy, multi kursor yang sudah builtin. Meskipun language-server setiap bahasa pemrograman dipasang secara terpisah dengan helix (begitu pula dengan editor lainnya), helix tetap memiliki fitur seperti autopairs, fugitive, dan lain-lain sebagai penunjang menulis program. Pengaturan untuk LSP tersedia di Helix Wiki. Konfigurasi keymap dan cara penggunaan lebih lengkap ada di dokumentasi resmi.

Helix terbilang memiliki performa yang cukup cepat. Bahkan tersedia dukungan modal seperti space, f, dan g yang memudahkan untuk manuver navigasi (Evans, Julia). Baik untuk pergi ke definisi, deklarasi, referensi.

Tentu pengguna baru yang bermigrasi dari vim atau neovim akan menyukainya dan sangat layak untuk dicoba. Meskipun Anda seorang vim/neovim veteran pun dengan pengalaman puluhan tahun (Lafdzun, Kalamuna).