“Il nome OS X ha un doppio significato: la X sta a indicare che si tratta della decima versione di Mac OS, ma anche il fatto che si tratta di un sistema Unix”. Quante volte abbiamo sentito o letto questa frase? E di preciso, qual è il suo significato? OS X nasce dalle fondamenta di NeXTSTEP, il sistema operativo delle macchine prodotte da NeXT, la casa fondata da Steve Jobs negli anni ’80, dopo il suo allontanamento dal consiglio di amministrazione di Apple. A sua volta, NeXT è (o meglio era) basato su FreeBSD, il sistema Unix libero che ha a sua volta radici in BSD, della Berkeley University.
Queste fondamenta garantiscono a OS X una serie di vantaggi tipici dei sistemi Unix, primi tra tutti la solidità e l’affidabilità, ma anche il fatto che, essendo OS X conforme alle specifiche POSIX, è altamente probabile che un programma scritto per sistemi BSD o Linux possa essere compilato, o facilmente adattato in modo da essere compilato, per OS X.
Inoltre – e qui viene il bello per tutti gli utenti Mac con spirito geek – come tutti i sistemi Unix-like, anche OS X consente di utilizzare una shell da finestra terminale e, attraverso di essa, una serie di strumenti la cui esistenza è ignota forse addirittura alla maggioranza degli utenti Mac. D’altra parte, uno dei grandi risultati ottenuti da Apple è stato proprio partire da Unix – sistema complesso e, per un utente inesperto, potenzialmente inutilizzabile – e arrivare a OS X, sistema di una semplicità disarmante, almeno per il suo utilizzo quotidiano. Gli strumenti di cui sopra rimangono disponibili all’interno del sistema, ma non è indispensabile utilizzarli. In questo articolo ci concentriamo proprio su uno di questi strumenti: il text editor vi (pronuncia vi-ài).
La filosofia di vi
Il nome vi è una abbreviazione della parola “visual” e indica che, a differenza del suo predecessore Ex, con vi è possibile editare testi in modo visuale anziché linea per linea. Si tratta di un text editor nato alla fine degli anni ’70, quando l’accesso a un computer comportava l’utilizzo di lentissimi terminali a carattere (le connessioni erano generalmente a 300 baud, ovvero 300 byte al secondo: ridisegnare completamente una schermata da 80 x 25 caratteri richiedeva più di 6 secondi) e con tastiere spesso molto più limitate delle attuali: i tasti a disposizione potevano limitarsi ai caratteri alfanumerici più spazio, invio, tasto maiuscolo, escape e poco altro. Niente tasti funzione o tasti cursore; e il mouse non era stato nemmeno ancora mostrato al grande pubblico. Era quindi necessario ideare un sistema che permettesse di limitare al minimo il numero di caratteri da mostrare (e aggiornare) e di tasti richiesti: da queste necessità è nato un editor con una quantità impressionante di funzionalità, estremamente potenti ma dalla complessità spesso scoraggiante (superata forse solo da quella dell’altrettanto storico emacs).
Di vi, OS X utilizza l’incarnazione probabilmente più diffusa, Vim (il nome sta per VI iMproved), che offre una serie di funzionalità aggiuntive rispetto alla versione base, come un sistema di help estremamente completo o la possibilità di creare estensioni con diversi linguaggi di programmazione. Per l’utente medio, comunque, vi e Vim sono grosso modo la stessa cosa. Se lanciato senza caricare alcun file, vi si presenta come una schermata vuota, con un carattere tilde (˜) all’inizio di ogni riga; nella riga più in basso sono indicate alcune informazioni su riga e colonna dove si trova il cursore, e una percentuale che indica la posizione relativamente alle dimensioni del file; oppure, “Top” o “Bot”, se il cursore si trova all’inizio o alla fine, o ancora “All” se tutto il file è visualizzato a schermo.
Per provare a utilizzare Vim esistono due possibilità: lanciare da terminale quello preinstallato con OS X, oppure scaricarne una versione più user friendly, come MacVim. Rispetto alla versione da terminale, MacVim offre funzionalità quali una minima interfaccia grafica e un migliore interfacciamento con il mouse, ma le funzioni di base sono fondamentalmente le stesse. Per una prova iniziale consigliamo di partire con la versione preinstallata: successivamente, potrete considerare il passaggio alla versione con interfaccia grafica che sarà possibile associare a tutti i file di testo. Per usare Vim da Terminale, la prima operazione consiste ovviamente nel lanciare quest’ultimo. Quindi, sulla linea di comando, scrivere vi e premere Invio. Come detto, verrà visualizzata una schermata vuota, con una serie di “˜” a sinistra, alcuni numeri in fondo alla pagina e alcune informazioni nel mezzo, relative a come accedere all’help in linea.
Un approccio ostico
Lanciato Vim, se si prova a inserire del testo sembra che qualcosa non vada: siamo di fronte a un text editor che non permette di scrivere nulla? Il fatto è che, all’avvio, ci si trova in modalità comando (command mode): per poter scrivere qualsiasi cosa è necessario premere i per passare alla modalità inserimento, in cui i caratteri digitati “spostano in avanti” quelli presenti, come ci si aspetta in un editor, oppure Maiuscolo + r per passare in quella di sovrascrittura, in cui i nuovi caratteri sostituiscono quelli presenti sotto il cursore. A questo punto è possibile scrivere tutto ciò che si desidera, ma apparentemente non si può fare altro che questo e tornare, con Esc, in modalità comando. Il fatto è che, come afferma sul proprio sito l’autore Bram Molenaar, Vim non è un’applicazione “che tiene l’utente per mano”, ma è necessario un minimo di sforzo per imparare a utilizzarla.
Abbiamo già evidenziato come Vi sia nato per essere utilizzato con una tastiera decisamente ridotta che non includeva i tasti cursore. Oggi noi possiamo usarli, ma l’editor ha ancora il “vecchio sistema” per spostarsi all’interno del file, sempre in modalità comando: di un carattere alla volta con h (sinistra), j (giù), k (su) e l (destra); di una parola alla volta con w (destra) e b (sinistra). Per portarsi rispettivamente alla fine e all’inizio di una riga si usano, prevedibilmente, $ e ^. Per portarsi alla fine del file Maiuscolo + G e per andare all’inizio gg. Infine, per spostarsi su una determinata riga si dà una sorta di “comando complesso”: si digitano i due punti seguiti dal numero di riga, ad esempio :20 per portarsi alla ventesima riga. Questo, come tutti i comandi di Vim che iniziano con i due punti (e sono molti, come vedremo), va terminato con Invio.
Esistono anche altre modalità di scrittura oltre alla normale modalità inserimento e a quella di sovrascrittura. Ci sono modalità per la sostituzione di una parola (Esc, poi cw da “change word”), che cancella la parola a destra del cursore e ci permette di sostituirla immediatamente, la sovrascrittura di un singolo carattere (Esc, poi r da “replace”), la sostituzione fino alla fine della riga (Esc, poi c$) e a partire dall’inizio della riga (Esc, poi c^). Per quasi tutte queste modalità c’è sempre la possibilità di utilizzare un modificatore numerico per indicare a Vim che la sostituzione da effettuare riguarda un determinato numero di elementi. Ad esempio, digitando Esc e poi 3cw si indica di voler sostituire le tre parole immediatamente a destra del cursore, mentre con Esc e poi 5rx si sovrascrivono 5 caratteri x a partire dalla posizione del cursore, e così via.
A questo punto si sarà già capito che uno dei grandi punti di forza di Vim sta nella possibilità di combinare (quasi) arbitrariamente i suoi comandi e “simboli” di base tra loro e con i modificatori numerici. Teniamo presente i comandi che abbiamo già descritto, aggiungiamo che un comando digitato due volte di seguito si estende a tutta una riga e completiamo con i comandi di cancellazione (d da “delete”, ciò che viene cancellato viene comunque copiato nella clipboard), copia (y, che ricorda “copy”) e incolla (p da “paste”). Ecco che così possiamo arrivare a comandi molto elastici che richiedono giusto un paio di tocchi sulla tastiera, come d$ che cancella dalla posizione del cursore fino alla fine della riga, copiando negli appunti quanto cancellato, oppure dd, che cancella la riga attuale e la copia negli appunti, e yw, che copia negli appunti la parola a destra del cursore. O anche :1,20d per cancellare dalla riga 1 alla riga 20, e :.,20d per cancellare dalla riga attuale fino alla riga 20.
Se tutto questo sembra complesso, in parte è perché in effetti lo è, in parte perché non siamo mai stati abituati a usare programmi sviluppati per fare molto con interfacce ridotte all’osso. La curva di apprendimento qui è piuttosto ripida, e non sorprende che in molti abbandonino Vim a diversi stadi, anche già all’inizio di questa curva. Una volta superato lo shock iniziale e con un minimo di pazienza, però, si può arrivare addirittura a chiedersi come se ne sia potuto farne a meno fino a oggi. La chiave di tutto sta nell’imparare subito a sfruttare praticamente l’elasticità di Vim.
Se ad esempio si desidera creare una riga composta da 50 caratteri tutti uguali, è sufficiente chiedere a Vim di ripetere 50 volte lo stesso comando di inserimento. Si preme Esc per tornare in modalità comando, si scrive 50, poi i (in basso a sinistra compare la dicitura — INSERT –) e infine (supponendo di volere cinquanta “a”) a. Per concludere l’istruzione basta premere nuovamente Esc per tornare in modalità comando: ecco che dopo un istante comparirà una riga di 50 “a”. Un dettaglio: tutto quello che digitiamo in modalità comando dovrebbe apparire in basso a destra nella finestra di Vim, ma questo dipende dalla configurazione standard della nostra versione di Vim e anche di OS X; nel caso il comando :set invsc dovrebbe sistemare le cose.
Ora, supponiamo di voler copiare questa riga e riprodurla 50 volte. Per essere sicuri di essere sempre in modalità comando, è necessario premere ancora Esc (a questo punto è chiaro che si tratta del tasto più gettonato), quindi, se sono state inserite altre righe oltre alle 50 “a” di prima, portare il cursore sulla riga interessata. Per copiare la riga negli appunti basta premere due volte il tasto y, per incollarla 50 volte, scrivere 50 (come prima, viene visualizzato il numero 50 nella parte bassa dello schermo) quindi premere p: compaiono le 50 copie della riga precedentemente memorizzata, e nell’ultima riga dello schermo viene visualizzata un’informazione a conferma dell’esecuzione di quanto richiesto.
La possibilità di ripetere lo stesso comando un numero indefinito di volte è una funzionalità estremamente potente: basti pensare che lo stesso metodo può essere applicato al movimento del cursore (se si sta editando un file enorme e si desidera spostarsi più in basso di 8000 righe, basta scrivere 8000 seguito dal cursore in basso) piuttosto che all’esecuzione di una macro. Ad esempio, è possibile assegnare un comando complesso alla pressione di un singolo tasto, quindi richiedere che l’esecuzione di tale comando venga ripetuta quante volte lo si desidera. Le possibilità sono virtualmente infinite.
Normal
0
14
false
false
false
IT
X-NONE
X-NONE
___________________________________________________
Continua la lettura su Applicando Magazine per approfondire l’argomento espressioni regolari.
Clicca qui per scaricare l’applicazione gratuita Applicando+ Puoi acquistare la rivista e leggerla e conservarla sul tuo iPad.
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:”Tabella normale”;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:””;
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:none;
font-size:11.0pt;
font-family:”Calibri”,”sans-serif”;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-ansi-language:EN-US;
mso-fareast-language:EN-US;}