Helix, un code editor da provare
Tags: editor, ide, vim, kakoune
Published: 2023-08-24 15:02:44

Tra i vari IDE usati finora VSCode è stato tra i miei preferiti. Vero che non avendo usato un qualsiasi IDE della JetBrain non posso essere obiettivo, ma vorrei portare un'altro tipo di esperienza: quella dell'uso di un **editor modale**.
Tra i più blasonati abbiamo **Vim** e più recentemente Neovim i quali, come succede a tutti la prima volta che si aprono, si rimane interdetti: non si capisce come scrivere e si tenta disperatamente di uscire; questo succede in quanto siamo nella _modalità errata_ (da qui editor modale), ossia nella modalità normale e non di inserimento.

## Primi fallimenti
Attratto dalla promessa, ascoltata spesso dal pulpito di [Primeagen](https://www.youtube.com/playlist?list=PLm323Lc7iSW_wuxqmKx_xxNtJC_hJbQ7R), di usare meno il mouse ed essere più veloce nella scrittura ho provato **Neovim** e a fatica mi sono entusiasmato; piuttosto mi sono sentito frustrato. La curva di apprendimento dopo anni di _Ctrl + qualsiasi tasto_ non è facile.
Ho provato quindi la modalità mista che consisteva in una delle tante estensioni che permettono di usare le modalità tipiche di Vim (vim motions) in VSCode nel pannello di edit, ma anche così non è stata una gran esperienza. 

## Primo incontro con Helix
Continuando a curiosare ogni tanto tra le alternative a VSCode mi sono imbattuto in [Helix](https://helix-editor.com) e devo dire che l'iniziare ad usarlo con regolarità è stata molto veloce. 
Certo serve un minimo di configurazione iniziale ma la documentazione è ben fatta e le risorse si possono trovare anche se ancora non abbondanti.

Helix è un progetto recente, iniziato nel 2021, ispriato da Vim e [Kakoune](https://kakoune.org), scritto in Rust e una delle scelte di design dell'applicazione è quella di integrare le funzionalità tipiche di un IDE piuttosto che adottarle tramite plugin. Questo mi ha reso da subito abbastanza produttivo in quanto non ho dovuto cercare il plugin migliore e come configurarlo.

Per quanto riguarda le modalità di utilizzo quelle sono tipiche degli editor modali: 
- modalità _normale_ per muoversi all'interno del documento e lanciare comandi
- modalità di _inserimento_ per scrivere
- modalità di _selezione_ per applicare delle modifiche a più contenuti anche non contigui (multi selezione).

Oltre a queste modalità di base, Helix denomina una serie di modalità minori: 
- _space mode_:  per i vari picker (file, errori, outline)
- _goto mode_: per spostarsi velocemente e navigare nell'albero sintattico (tree sitter) e nel progetto, ecc...
- _match mode_: per selezionare e applicare modifiche attorno ad una stringa

Altra cosa che aiuta nell'adozione dell'editor è che in modalità normale alla pressione di un tasto compare un **popup guida** di possibilità (comandi previsti, opzioni disponibili) che ti suggeriscono come procedere: utile per applicare ma anche apprendere comandi finora sconosciuti.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e7aywhn064kk8rxuaceh.png)

Inoltre Helix organizza i gruppi di comandi in modo piuttosto intuitivo: per esempio con la lettera `m` (match mode) troviamo la possibilità di selezionare, cancellare modificare parti di contenuto attorno al blocco in cui ci si trova: diventa molto semplice aggiungere, rimuovere, sostituire, per esempio, parentesi e virgolette. 
Oppure con lo `spazio` (space mode) seguito da lettera possiamo cercare all'interno del progetto tramite ricerca fuzzy: file, problemi da risolvere, i file in lavorazione, gli ultimi punti del codice visitati, ecc... 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h1cj9vwt158g3erdx6s7.png)

Per finire utilizza il **tasto shift** unito ad una lettera per applicare il comando opposto a quello che corrisponde alla lettera stessa: per esempio se abbiamo `u` per undo, con `U` applichiamo il redo (occhio a quando avete il Caps Lock attivato).

Consiglio per introdursi allo strumento il comando `:tutor` che lancia un **tutorial interno** a Helix che attraverso dei veloci esercizi ti fa prendere confidenza con i vari comandi e modalità.

## Cosa cambia nell'usare un editor modale
Dopo qualche tempo di utilizzo la cose che mi sono sorpreso a pensare sono:
- _non ho mai avuto bisogno del pannello di struttura cartelle file a lato (folder tree)_: la ricerca fuzzy (già usata molto in VSCode) è molto più veloce ed efficace.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/knc62aw9vje9o77el9j0.png)

- _qual'è il modo migliore per fare l'operazione che sto eseguendo?_: spesso mi ritrovo a chiedermi come posso spostarmi più velocemente sul punto individuato o come posso selezionare il blocco di codice a partire dal punto in cui sono con il cursore. Un modo per trovare la risposta all'interno della applicazione è lo `spazio + ?` che ti permette di ricercare tra i vari comandi disponibili e visualizzare gli shortcut.

Questo per dire che un ide del genere ti abitua a non limitarti ai comandi base di editing di un testo come taglia copia incolla, cerca sostituisci, spostati con frecce e mouse.

## Cosa mi manca
Attualmente le cose che non ho ancora risolto sono:
- _come gestire il debug:_ negli sviluppi attuali che sto affrontando il debug è demandato al browser però devo capire come applicare questa modalità che esiste ma non ho ancora esplorato.
- _come visualizzare i git blame:_ git a differenza di VSCode non è integrato e a volte è utile quando si lavora in team per capire chi ha scritto cosa in modo da valutare meglio le modifiche da fare.

Devo dire che ad ora non sento la mancanza degli ide usati precedentemente e anzi ho cercato client git che adottano modalità simili di gestire l'interazione con i comandi come [lazygit](https://github.com/jesseduffield/lazygit). 
Questo testo, che è tutt'altro dalla scrittura di codice, l'ho comunque preferito scrivere con Helix!

E per voi com'è l'esperienza con editor modali? Conoscevate già Helix?