Esiste un paradosso nella cultura informatica che ha generato migliaia di meme e battute: chi entra in Vim poi non sa come uscirne. Il comando :q, abbreviazione di “quit”, è diventato l’insider joke più longevo tra gli sviluppatori, al punto che la ricerca “how to exit Vim” figura stabilmente tra le query più cercate su Stack Overflow. Eppure dietro questa apparente ostilità si nasconde una filosofia di editing testuale per la riga di comando (il terminale, ma esistono anche porting per l’interfaccia grafica) che ha plasmato mezzo secolo di informatica.

Per capire Vim bisogna tornare indietro fino al 1976, quando un giovane dottorando della University of California, Berkeley, di nome Bill Joy cominciò a sviluppare un’interfaccia visuale per l’editor di linea ed. Joy non era uno studente qualsiasi: sarebbe diventato cofondatore di Sun Microsystems e autore principale di Berkeley Unix (BSD), il sistema operativo open source che ha posto le fondamenta di Internet. L’editor che creò, chiamato vi, introduceva un concetto rivoluzionario: la modalità, ossia la separazione tra la fase di scrittura e quella di navigazione del testo.

Vi nacque in un’epoca in cui le risorse dei computer erano estremamente limitate e i terminali non disponevano nemmeno di tasti freccia standardizzati. Per questo Joy scelse i tasti h, j, k, l della home row come comandi di movimento, una soluzione ergonomica che permetteva di non staccare mai le mani dalla posizione di digitazione. La leggenda vuole che Joy abbia scritto vi in un fine settimana, ma la realtà è più complessa e affonda le radici in mesi di sviluppo collaborativo nei laboratori di Berkeley.

La nascita di Vim in Olanda

Tempo qualche decennio e il testimone passò nelle mani di un informatico olandese nato a Lisse nel 1961: Bram Moolenaar. Nel 1988 Moolenaar acquistò un computer Amiga e, abituato a lavorare con vi sui sistemi Unix, cercò un clone adeguato per la nuova piattaforma. Trovò solo Stevie, una versione parziale e piena di bug originariamente sviluppata per Atari ST, e decise di riscriverla da zero chiamandola Vi IMitation. In breve: Vim.

La prima versione pubblica, la 1.14, venne distribuita il 2 novembre 1991 attraverso i Fred Fish Disk, una serie di dischetti freeware molto popolari nella comunità Amiga. Nel 1993 il nome cambiò in Vi IMproved (mantenendo lo stesso acronimo) quando le funzionalità superarono quelle dell’originale, introducendo caratteristiche come l’undo multilivello che vi non possedeva. La portabilità su Unix e MS-DOS arrivò già nel 1992, trasformando Vim in uno strumento veramente universale.

Moolenaar non era soltanto un programmatore eccellente ma anche un uomo dalla profonda sensibilità sociale. Nel 1993 partì come volontario per l’Uganda, dove lavorò per un anno in un progetto di sostegno ai bambini orfani a causa dell’AIDS. Al ritorno fondò la ICCF Holland, trasformando Vim in charityware: chi apprezzava il software era invitato a donare per il Kibaale Community Centre nel sud dell’Uganda. In trent’anni questa iniziativa ha raccolto oltre mezzo milione di euro.

Alcuni editor da riga di comando

EditorModale o altroPrincipali pregiPrincipali difetti
vi / VimModaleEstremamente veloce, potente, ampiamente usato, personalizzabileCurva di apprendimento ripida
EmacsNon modaleEstremamente estensibile, ambiente di sviluppo completoComplesso e pesante, richiede tempo per configurazione
NanoNon modaleSemplice, facile da usare, preinstallato su molte distro LinuxFunzionalità limitate rispetto a Vim o Emacs
MicroNon modaleFacile da usare, moderno, buona alternativa per noviziMeno funzionalità avanzate rispetto a Vim o Emacs
NeovimModaleModernizzazione di Vim, migliore gestione dei plugin, estendibile con LuaRichiede configurazione, curva di apprendimento
HelixModaleModerno, linguaggio Rust, supporto LSP integrato, out-of-the-boxNuovo, meno diffuso, minore ecosistema plugin

La guerra degli editor

Parallelamente a vi, nel 1976 Richard Stallman sviluppava Emacs, un editor basato su una filosofia radicalmente diversa: estensibilità attraverso combinazioni di tasti anziché modalità. La rivalità tra i due approcci è diventata leggendaria nel mondo Unix, con schiere di sostenitori pronti a difendere il proprio strumento preferito. Vim puntava sulla leggerezza e sulla velocità, Emacs sulla potenza e sulla personalizzazione estrema.

La vera forza di Vim, però, risiede nel suo paradigma compositivo, che combina verbi e movimenti in un linguaggio naturale per manipolare il testo. Il comando d significa “cancella”, w significa “parola”: nella modalità navigazione digitando dw si cancella dalla posizione corrente alla parola successiva. Ripetere invece due volte cancella (dd), taglia la riga corrente.

Questa sintassi permette di esprimere azioni complesse con poche sequenze di tasti, trasformando l’editing in una sorta di calligrafia digitale. La curva di apprendimento è ripida, ma (sostengono gli appassionati) le soddisfazioni sono enormi. Unita al fatto che con Unix/Linux/macOS il file system viene visto dalla shell come un file di testo, è possibile anche modificare i nomi di migliaia o decine di migliaia di file contenuti in un colpo solo come se si stesse editando in maniera automatica un lungo file di testo.

Purtroppo il 3 agosto 2023 Bram Moolenaar è morto a Santa Cruz de Tenerife, lasciando un’eredità che continua attraverso i suoi eredi spirituali. Neovim, nato nel 2015, ha rifattorizzato il codice introducendo il supporto nativo per Lua e i Language Server Protocol. Helix, apparso nel 2021 e scritto in Rust, offre un’esperienza moderna con funzionalità IDE integrate senza bisogno di plugin.

Principali comandi di Vim e loro funzione

ComandoModalitàFunzioneNote / Uso in altri programmi
iNormal -> InsertEntra in modalità inserimentoAnaloghi in quasi tutti editor modali
EscInsert/Visual -> NormalTorna alla modalità normaleUsato in molti editor modali e app (es. Gmail)
:wNormalSalva il fileComando di salvataggio simile in vari editor
:qNormalEsce dall’editorConcetto di “quit”
:q!NormalEsce senza salvareSpecifico di Vim e simili
ddNormalTaglia la riga correntePresente in vari editor con modalità Vim
yyNormalCopia la riga correnteMolto usato nei programmi ispirati a Vim
pNormalIncolla dopo il cursoreUsato anche in altre applicazioni Vim-like
vNormal -> VisualEntra in modalità selezione visivaUsato in molti editor modali
/NormalRicerca testoFunzione di ricerca ispirata a Vim
:%s/old/new/gNormalSostituzione globale di testoSintassi di sostituzione ispirata a Vim
L'informatica fatta solo di testo (Immagine ChatGPT)
L’informatica fatta solo di testo (Immagine ChatGPT)

L’eredità nei software moderni

Oggi i keybinding di Vim sono ovunque, ben oltre il terminale. Visual Studio Code offre un’estensione che replica fedelmente l’editing modale, Gmail nasconde scorciatoie da tastiera ispirate a vi, persino i browser moderni supportano plugin che trasformano la navigazione web in un’esperienza vim-like. Questa diffusione capillare testimonia l’efficacia di un paradigma nato cinquant’anni fa su terminali senza mouse.

Vim funziona oggi su praticamente qualsiasi sistema operativo, da macOS a Windows, da Linux alle più esotiche varianti Unix. La sua leggerezza gli permette di aprire file enormi istantaneamente, mentre gli editor moderni faticano con documenti di poche migliaia di righe. Per chi lavora su server remoti attraverso connessioni SSH, resta spesso l’unico strumento disponibile e affidabile. Ma anche per chi utilizza vecchi computer ormai obsoleti con processori affaticati dai carichi di lavoro moderni, Vim e i suoi eredi sono una mano santa.

Tra parentesi, ci sono anche altri editor di testo più orientati alla prosa anziché al codice, per chi comunque voglia scrivere dalla riga di comando: micro, nano e ne, per esempio. I link sono nelle fonti di questo articolo, alla fine della pagina.

La curva di apprendimento, come dicevamo, può apparire ripida, ma l’investimento viene ripagato in termini di efficienza e controllo. Una volta interiorizzata la grammatica di verbi e movimenti, tornare agli editor tradizionali risulta frustrante come scrivere a mano dopo aver imparato la tastiera. Il segreto di :q non è come uscire da Vim, ma perché alla fine nessuno vuole più farlo.

Alcune fonti di questo articolo: