I Use NeoVim btw (E dovresti anche tu)

Sommario

immagine-header

Introduzione


NeoVim mi ha sempre affascinato sin da quando l’ho visto utilizzare per la prima volta da ThePrimeagen. L’efficienza dell’editing del testo, il minimalismo dell’interfaccia, la vicinanza dell’editor al terminale sono state solo parte di quello che mi ha affascinato sin da subito. Dentro di me cresceva sempre di più il desiderio di provarlo, di renderlo mio.
Ma partiamo dalla storia, spesso ci soffermiamo solo sul prodotto finale, ma per uno sviluppatore penso sia interessante sapere cosa c’è stato dietro.

Storia di Vi, Vim e NeoVim


Vi (1976-1980s)

Contesto storico

Negli anni ‘70, l’interazione con i computer avveniva tramite terminali teletype (senza schermo) o visual display molto primitivi. Gli editor testuali erano estremamente basilari. Il più usato era ed, un editor riga-per-riga.

Creazione di ex e Vi

  • 1976: Bill Joy, studente a Berkley, sviluppa ex come un miglioramento di ed.
  • Vi(da “Visual”) nacque come modalità visuale di ex.
  • Vi venne incluso nel sistema BSD Unix. Era modale: una modalità per inserire testo e una per dare comandi.

Caratteristiche chiave:

  • Completamente tastiera-driven.
  • Ottimizzato per lente linee seriali (bassa latenza).
  • Praticamente senza dipendenze.
  • Diffusione garantita da Unix: Vi diventò lo standard.

Curiosità: per decenni Vi fu l’unico editor garantito disponibile su ogni sistema Unix, diventando sinonimo di “editor di sistema”.

Vim - L’evoluzione migliorata (1991-2010s)

Le Origini su Amiga

  • 1991: Bram Moolenaar scrive Vim su Amiga come clone libero di Vi.
  • Significato: Vi IMproved.
  • Viene reso disponibile su UNIX, Windows, DOS.

Perché “improved”?

  • Vim prese Vi e lo rese programmabile, estendibile, configurabile.
  • Introduce:
    • File di configurazione .vimrc
    • Macro, mapping, abbreviazioni
    • Undo multipli
    • Sintassi evidenziata
    • Script Vimscript per automatizzare comportamenti

Versioni importanti:

  • Vim 5 (1998): Introduce plugin caricabili.
  • Vim 6(2001): Supporto split window, tab, buffer.
  • Vim 7 (2006): Aggiunta autocomplete, spell check, undo tree.
  • Vim 8 (2016): Finalmente arriva il supporto asincrono, anche se limitato.

Problema principale: Lo sviluppo era centralizzato attorno a Bram. Era molto conservatore, il che rallentava l’adozione di feature moderne.

NeoVim - Il fork rivoluzionario (2014-oggi)

Origini del progetto

  • 2014: Annuncio di NeoVim come fork di Vim 7.4.
  • Creato da una community stanca dei limiti architetturali e burocratici di Vim
  • Obiettivi principali:
    • Pulizia del codice base.
    • API esterne per estendere NeoVim da altri linguaggi (Lua, Python…).
    • Esecuzione asincrona per plugin moderni.

Caratteristiche distintive

  • Lua come linguaggio di configurazione (molto più veloce di Vimscript).
  • LSP nativo: supporto linguistico in stile VSCode, out of the box.
  • Tree-sitter nativo per parsing avanzato del codice.
  • Interfacce moderne: editor GUI esterni (es. Neovide, Goneovim).
  • Plugin manager moderni (es. Lazy.nvim, Packer.nvim, ecc).

Evoluzione

  • Crescita esplosiva della community.
  • Ecosistemi completi basati su NeoVim:
    • AstroNvim, LunarVim, NvChad
  • Progresso **costante e trasparente su GitHub.

Oggi NeoVim è considerato l’editor terminale più avanzato al mondo, con supporto moderno, integrazione con strumenti professionali, e prestazioni eccellenti.

La mia esperienza


Inizio

Quando ho cominciato, non sono riuscito ad adottare NeoVim come editor da subito, mi mancavano conoscenza e abilità. Quindi ho spesso rinunciato, però il desiderio di farlo funzionare continuava a riaffiorare, di capirlo e di configurarlo a dovere per renderlo utilizzabile come IDE. Ai tempi frequentavo un bootcamp e utilizzavo VSCode per tutto e IntelliJ per Java e volevo riuscire almeno a renderlo utilizzabile per poter fare un primo switch.

La scoperta di Kickstart.nvim

Tutto è cambiato quando ho fatto la scoperta di Kickstart.nvim. Kickstart.nvim è una configurazione base che rende NeoVim utilizzabile come IDE fin da subito. La configurazione è tutta in un solo file con tanti commenti che spiegano cosa sta succedendo e perché, ma soprattutto come cambiare ed implementare le proprie configurazioni. Da lì è stato tutto in discesa, ho iniziato a sperimentare con configurazioni mie, ogni volta che programmando mi veniva in mente qualcosa da cambiare per rendere l’esperienza più piacevole, trovavo un nuovo plugin o cambiavo semplicemente delle configurazioni base di NeoVim.

Ora utilizzo NeoVim per qualsiasi cosa e se incontro una nuova tecnologia per la quale non è ancora configurato, so che posso configurarlo, so che un modo si trova sempre. Riesco persino a programmare e runnare Java ora.
La chiave ad un certo punto è stata organizzare bene il codice del grosso file lua di Kickstart splittandolo in più file separati, creando una struttura di file ordinata. In questo modo se devo aggiungere un nuovo plugin, aggiungo un nuovo file in un punto specifico, se devo aggiungere o modificare degli shortcut so che devo andare nel file remaps.lua e così via.

Consiglio vivamente di fare la propria esperienza con NeoVim perché sono sicuro che non ve ne pentirete :)

Questa è la mia configurazione attuale, la tengo in una repository GitHub perché in questo modo se faccio delle modifiche, poi posso pullarle da altre macchine su cui utilizzo NeoVim ed è anche più semplice installare NeoVim su macchine nuove tenendo la mia configurazione personale.

I vantaggi di NeoVim


Per me i vantaggi di NeoVim sono molteplici:

  • Completamente Open Source.
  • Vim motions
    • Il segreto per essere così efficiente, Vim ha creato queste Vim Motions che permettono di muoversi nel testo ed editarlo velocemente senza toccare il mouse.
    • Ecco una serie di video creati da ThePrimeagen che le spiegano approfonditamente: Vim As Your Editor
  • Completamente configurabile
    • Qualsiasi cosa è personalizzabile (shortcuts, comportamenti, comandi automatici)
    • Ogni volta che voglio modificare qualcosa, so dove mettere le mani perché ho studiato la configurazione iniziale e ho costruito su di essa.
  • Il minimalismo dell’interfaccia, priva di bloat.
  • Integrato il più possibile all’interno del terminale.
    • Questo mi permette anche di utilizzarlo attraverso ssh su altre macchine, penso sia un vantaggio non da poco.
  • La sua leggerezza e velocità di esecuzione.
  • Infiniti plugin creati dalla community per adattare NeoVim per qualsiasi situazione
    • Essendo questi plugin open source, è possibile anche personalizzarli eseguendo dei fork e modificandone il codice sorgente a proprio piacimento per rendere il plugin e la configurazione, veramente plasmata su di te.

Prova tutte le opzioni


Penso che per essere sviluppatori migliori, dovremmo provare tutto, tutte le tecnologie di cui tutti parlano, capire di cosa si sta parlando, sperimentare e creare un nostro pensiero.
Sono fermamente convinto che le cose che ci fanno paura perché complicate o faticose, siano esattamente quelle che dovremmo provare ed imparare. Questo perché ci spaventano perché sono complicate, ma sappiamo che lo sforzo sarebbe ricompensato.
Pensa a tutte quelle cose che prima di imparare credevi fossero molto difficili o addirittura impossibili. Per me è guidare, all’inizio il solo pensiero di dover guidare mi provocava ansia. Ora è una seconda natura e io credo che sia una sensazione bellissima di progressione e di crescita.

Conosci i tuoi strumenti


Che tu utilizzi VSCode o NeoVim o qualsiasi altro IDE, prenditi il tempo di imparare esattamente tutto quello che può fare. Come sviluppatori software spendiamo tante ore al giorno su questi strumenti, vale davvero la pena conoscerli a fondo al fine di essere sviluppatori migliori.
Penso che NeoVim ti forzi a fare esattamente questo, per renderlo utilizzabile, devi capire come funziona e tutte le cose che può fare. Ti spinge a configurarlo esattamente secondo le tue esigenze personali, trovare soluzioni di configurazione su misura attraverso lo scripting lua.

Conclusione


In definitiva, NeoVim non è solo un editor di testo: è un’esperienza di apprendimento continua, come penso debba essere la vita di uno sviluppatore. Non è perfetto per tutti, e richiede un investimento iniziale di tempo ed energia, ma la ricompensa è un ambiente di sviluppo che parla la tua lingua, adattato al tuo modo di lavorare.
Non si parla solo di scrivere codice, ma di riscoprire il piacere di farlo con consapevolezza, controllo e precisione. In ogni caso, qualsiasi IDE tu scelga di utilizzare, ti consiglio vivamente di conoscerlo in profondità e comprendere a pieno tutto quello che può fare.


Vim As Your Editor
La mia configurazione NeoVim
VimHero per fare pratica
Kickstart.nvim