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
Hal yang paling penulis sukai dari helix adalah minimalis konfigurasi. 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.
Shock therapy
Sebelumnya penulis adalah pengguna neovim dan vim tentunya. Ketika menggunakan helix mau tidak mau harus belajar lagi. Meskipun minim konfigurasi, 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.
Terminal
hx --tutor
Bagian 1: Pemasangan
GNU/Linux
Pemasangan di distribusi linux tergantung dari paket manager yang digunakan, umumnya menggunakan nama paket helix
. Anda bisa mengecek paket tersebut apakah tersedia di distribusi linux melalui situs Repology.
- NixOS
Terminal
nix-env -iA nixos.helix
- Non NixOS
Terminal
nix-env -iA nixpkgs.helix
/etc/nixos/configuration.nix
[
environment.systemPackages =
pkgs.helix];
Terminal
nix-shell -p helix
Terminal
sudo add-apt-repository ppa:maveonair/helix-editor
sudo apt update
sudo apt install helix
Terminal
sudo xbps-install helix
Terminal
sudo dnf copr enable varlad/helix
sudo dnf install helix
Terminal
sudo pacman helix-git
MacOS
Helix tersedia di homebrew-core. Buka iterm2
atau terminal lalu jalankan perintah ini.
Terminal
brew install helix
Windows
Tersedia melalui Scoop, Chocolatry atau MSYS2.
Terminal
scoop install helix
Terminal
choco install helix
Terminal
pacman -S mingw-w64-x86_64-helix
Panduan pemasangan selengkapnya bisa merujuk ke halaman dokumentasi.
Bagian 2: Penggunaan dasar
Membuka berkas
Membuka helix dengan menjalankan hx
.
Terminal
hx
Membuka dengan berkas tertentu.
Terminal
hx filename.xyz
Bagian 3: Konfigurasi
Beberapa konfigurasi dasar yang mungkin perlu ditambahkan. Misalnya jenis tema dan nomer baris.
Command | Description |
---|---|
:theme tokyonight |
Mengganti tema. |
Konfigurasi permanen bisa membuka config.toml
.
Command | Description |
---|---|
:config-open |
Membuka konfigurasi helix. |
:config-reload |
Memuat ulang konfigurasi helix. |
~/.config/helix/config.toml
theme = "tokyonight"
[editor]
line-number = "relative"
cursorline = true
[editor.lsp]
display-messages = true
Yap, benar. Konfigurasi tambahan penulis hanya beberapa baris diatas. Selengkapnya dapat merujuk ke halaman konfigurasi.
Bagian 4: Penggunaan lanjutan
Menghapus karakter
Berbeda dengan vim, menghapus karakter di helix menggunakan keymap dd.
Key | Description |
---|---|
dd |
Menghapus 1 karakter. |
Memasukkan karakter
Sama halnya dengan vim, mode insert
tetap menggunakan ii.
Key | Description |
---|---|
ii |
Mode insert . |
EscEsc |
Mode normal (keluar dari mode insert). |
Menyimpan berkas
Command | Description |
---|---|
:w |
Menyimpan berkas di buffer saat ini. |
:w filename.xyz |
Menyimpan berkas di buffer dengan nama tertentu. |
Bisa dikombinasikan dengan q
untuk keluar dari helix.
Command | Description |
---|---|
:wq |
Menyimpan dan menutup aplikasi. |
:wqa |
Menyimpan dan menutup semua buffer. |
Mode insert
Seperti yang telah diketahui sebelumnya, keymap ii untuk mode insert tepat sebelum kursor. Sedangkan ada beberapa keymap lainnya seperti:
Key | Description |
---|---|
ii |
Mode insert sebelum kursor. |
aa |
Mode insert setelah kursor. |
II |
Mode insert di awal baris. |
AA |
Mode insert di akhir baris. |
Membuka baris baru
Key | Description |
---|---|
oo |
Mode insert setelah baris saat ini. |
OO |
Mode 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.
Key | Description |
---|---|
ww |
Pindah dan menyeleksi 1 kata, termasuk spasinya. |
ee |
Pindah dan menyeleksi 1 kata dari kursor sampai di akhir karakter kata. |
bb |
Pindah dan menyeleksi 1 kata dari kursor sampai di awal karakter kata. |
keymap WW, EE dan BB 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 2w2w, 4e4e, 5b5b. Penjelasannya seperti ini:
Key | Description |
---|---|
2w2w |
Pindah 2 kata ke depan. |
4e4e |
Pindah 4 kata ke depan yang diakhiri di akhir kata. |
5b5b |
Pindah 5 kata ke belakang. |
Mengubah karakter
Pintasan yang digunakan yaitu keymap rr.
Key | Description |
---|---|
cc |
Mengubah karakter atau kata/kalimat yang terseleksi. |
Misalnya menyeleksi kata dengan ww, lalu ganti dengan keymap cc, langsung masuk ke mode insert.
Mode visual/seleksi
Mode visual di helix hampir sama seperti di vim.
Key | Description |
---|---|
vv |
Mode visual . |
vv lagi, atau EscEsc | Mode normal (keluar dari mode visual). |
Menyeleksi baris
Menyeleksi baris menggunakan keymap xx, jika ingin menyeleksi baris selanjutnya tekan xx lagi. Kadang kala niatnya ingin menghapus suatu karakter, tetapi menjadi seleksi di helix. (akibat alam bawah sadar terbiasa menggunakan xx untuk menghapus karakter di vim.)
Key | Description |
---|---|
xx |
Menyeleksi 1 baris. |
55 |
Menyeleksi 5 baris. |
;; |
Melepaskan seleksi baris. |
AltAlt + ;; | Membalikkan/flip seleksi baris. |
Pembatalan perubahan
Perintah untuk membatalkan perubahan:
Key | Description |
---|---|
uu |
Undo |
UU |
Redo. |
Ulangi beberapa kali hingga perubahan sesuai dengan yang diharapkan.
Penyalinan dan penempelan
Menyalin di helix dapat dilakukan di internal helix maupun di sistem clipboard.
Key | Description |
---|---|
yy |
Yank/copy, menyalin karakter yang terseleksi. |
pp |
Paste, menempelkan hasil salinan. |
PP |
Paste, menempelkan hasil salinan ke posisi sebelum kursor. |
Dapat dilakukan juga dengan perhitungan untuk menentukan jumlah salinan/tempelan.
Key | Description |
---|---|
2y2y |
2x Yank/copy, menyalin karakter yang terseleksi. |
4p4p |
4x Paste, menempelkan hasil salinan. |
10P10P |
10x Paste, menempelkan hasil salinan ke posisi sebelum kursor. |
Pada dasarnya keymap dd (menghapus karakter) dan cc (mengubah karakter) juga dapat dikatakan mode yank, yang mana hasil karakter yang dihapus/diubah disimpan di buffer sehingga dapat dilakukan perintah tempel (paste) pp atau PP.
Untuk menghindari penyimpanan di buffer, gunakan AltAlt + dd atau AltAlt + cc. Sedangkan untuk menyalin atau menempelkan dari sistem clipboard, gunakan keymap dibawah ini.
Key | Description |
---|---|
SpasiSpasi + yy | Copy/menyalin dari sistem. |
SpasiSpasi + pp | Paste/menempelkan dari sistem. |
Pencarian karakter
Mencari karakter seperti di vim atau neovim.
Key | Description |
---|---|
// |
Mencari karakter/kata. |
nn |
Menuju hasil pencarian selanjutnya. |
NN |
Menuju hasil pencarian ke sebelumnya. |
?? |
Mencari karakter/kata secara mundur. |
Tidak seperti di vim, di helix jika melakukan pencarian dengan ?? arah nn tetap kedepan dan NN ke belakang/sebelumnya.
Multiple cursor
Menambahkan kursor sangat berguna untuk mengubah karakter secara bersamaan. Misalnya untuk menghapus, mengganti, dan fungsi regex.
Key | Description |
---|---|
CC |
Mencari karakter/kata. |
AltAlt + CC | Menuju 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.
Key | Description |
---|---|
ss |
Memilih karakter yang cocok sesuai yang diseleksi. |
Misalnya pola kerjanya seperti ini, seleksi dengan xx beberapa kali atau %% untuk semua baris. tekan ss lalu masukkan karakter yang dituju, tekan EnterEnter. Secara otomatis menjadi multi kursor. Selanjutnya dapat diubah sesuai keinginan.
Seleksi tambahan dengan regex
Penyeleksian ini dapat menggunakan tanda plus “+
” saat menggunakan keymap ss di area seleksi. Misalnya: spasi dan plus “+
”
Meluruskan dari seleksi
Key | Description |
---|---|
&& |
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
Key | Description |
---|---|
AltAlt + ss | Untuk 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
Key | Description |
---|---|
ff |
Menyeleksi baris hingga tepat sampai ke karakter yang dituju. |
tt |
Menyeleksi baris hingga sampai ke karakter yang dituju, kursor tidak sampai ke karakter. |
FF dan TT juga memiliki fungsi serupa, hanya saja melewatidi titik whitespace spasi atau tab.
Mengganti karakter atau kata
Key | Description |
---|---|
rr |
Menempelkan dengan karakter khusus. |
RR |
Menempelkan dengan hasil salinan dari buffer atau dari system clipboard. |
Pengulangan
Pengulangan dapat dilakukan untuk mengulang perintah yang sama, atau mengulang hasil pencarian ff dan tt sebelumnya.
Key | Description |
---|---|
.. |
Mengulangi hasil mode insert sebelumnya. |
AltAlt + .. | Mengulangi perintah dari hasil ff atau tt 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.
Key | Description |
---|---|
RR |
Mengganti teks yang terseleksi dengan hasil salinan yank/clipboard. |
Menggabungkan baris
Beberapa baris perlu diseleksi dahulu dengan xx, kemudian tekan JJ.
Key | Description |
---|---|
JJ |
Menggabungkan beberapa baris yang sudah diseleksi. |
Indentasi baris
Indentasi pada baris saat ini atau baris yang diseleksi.
Key | Description |
---|---|
>> |
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.
Key | Description |
---|---|
Ctrl-aCtrl-a |
Menambahkan nilai. |
Ctrl-xCtrl-x |
Mengurangi 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:
Key | Description |
---|---|
aa, lalu yy | Menyimpan (yank) salinan ke register a . |
bb, lalu yy | Menyimpan (yank) salinan ke register b . |
cc, lalu yy | Menyimpan (yank) salinan ke register c . |
Setelah disimpan, selanjutnya menempelkan teks dari suatu register.
Key | Description |
---|---|
aa, lalu pp | Menempelkan (paste) teks dari register a . |
bb, lalu pp | Menempelkan (paste) teks dari register b . |
cc, lalu pp | Menempelkan (paste) teks dari register c . |
Hasil salinan tersebut juga dapat digunakan untuk mengganti teks yang sudah diseleksi.
Key | Description |
---|---|
aa, lalu rr | Mengganti (replace) teks dari register a . |
bb, lalu rr | Mengganti (replace) teks dari register b . |
cc, lalu rr | Mengganti (replace) teks dari register c . |
Fungsi Macro
Berguna untuk menyimpan langkah-langkah perintah ke dalam suatu register (default @).
Key | Description |
---|---|
QQ, lalu rr | Memulai perekaman macro. |
QQ, lalu rr | Menghentikan perekaman macro. |
qq, lalu rr | Menjalankan fungsi macro. |
5q5q, lalu rr | Menjalankan fungsi macro selama 5 kali, bisa diganti dengan nqnq. |
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 ww/ee/bb, tekan ** untuk menyimpan sebagai register pencarian. Kemudian kata tersebut dapat dicari dengan nn atau NN.
Key | Description |
---|---|
** |
Menyimpan hasil seleksi ke dalam register pencarian //. |
Menggunakan Jumplist
Dengan daftar lompat memungkinkan untuk menyimpan posisi kursor di posisi tertentu.
Key | Description |
---|---|
Ctrl-sCtrl-s |
Menyimpan jumplist. |
Ctrl-oCtrl-o |
Jumplist selanjutnya. |
Ctrl-iCtrl-i |
Jumplist sebelumnya. |
Memutar dan menghapus seleksi primer
Setelah menyeleksi, mungkin adakalanya beberapa seleksi tidak perlu diikutkan. Dengan menggunakan AltAlt + ,,, hasil seleksi yang terpilih bisa dihapus.
Key | Description |
---|---|
)) |
Menuju primer seleksi selanjutnya. |
(( |
Menuju primer seleksi sebelumnya. |
AltAlt + ,, | Menghapus primer seleksi utama. |
Mengganti huruf besar/kecil
Mengganti huruf kapital (uppercase) ke huruf kecil (lowercase) dapat menggunakan ``, sedangkan huruf besar menggunakan AltAlt + ``.
Key | Description |
---|---|
`` atau AltAlt + `` | 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 xx, ww, ee, atau bb.
- Tekan SS 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 AltAlt + ;;.
- Dalam mode multi kursor, ganti perubahan yang diinginkan dengan rr, cc, atau ii.
Sebagai contoh, ada 3 kalimat. pisahkan dan beri huruf kapital didepan.
belajar bahasa pemrograman! python adalah high-level programming? diciptakan oleh guido van rossum.
Menjadi:
Belajar bahasa pemrograman!
Python adalah high-level programming? Diciptakan oleh guido van rossum.
Bagian 5: Penutup
Penulis menyarankan helix apabila ingin 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 wiki github. Konfigurasi keymap dan cara penggunaan lebih lengkap ada di dokumentasi resmi.
Helix terbilang memiliki performa yang cukup cepat. Bahkan tersedia dukungan modal seperti SpasiSpasi, ff, dan gg yang memudahkan untuk manuver navigasi. Tentu pengguna baru yang bermigrasi dari vim atau neovim akan menyukainya dan sangat layak untuk dicoba.
Sekian. Jika Anda mempunyai pertanyaan, saran, dan kritikan silahkan kirim ke email, telegram atau instagram. Semoga tulisan ini bermanfaat untuk pembaca semuanya.
Reuse
Citation
@online{qurrotul_ainur2023,
author = {Qurrotul Ainur, Hervy},
title = {Belajar {Menggunakan} {Helix} {Editor} Alternatif {Neovim}
Dan {Vim}},
date = {2023-02-07},
url = {https://hervyqa.dev/blog/belajar-menggunakan-helix-editor-alternatif-neovim-dan-vim/},
langid = {en}
}