EDITOR VI

()

L’Editor VI è un editor di testo con interfaccia testuale per BSD e Unix.

Il nome deriva dalla più breve abbreviazione non ambigua del comando visual in ex (cioè <vi>). Questo comando commuta l’editor di linea ex in modalità visuale.

Vi insieme ad Emacs è stato uno dei protagonisti della cosiddetta guerra degli editor.

Per comodità, lo stesso programma parte in modalità vi o ex a seconda del nome con cui lo si lancia. “vi” è un’abbreviazione che si pronuncia lettera per lettera come [ vi: ai ] e non come parola [ vai ].
Si avvia più rapidamente di Emacs e necessita di meno memoria, quindi anche alcuni sostenitori di Emacs lo utilizzano come editor per le e-mail o piccole modifiche. Per i “floppy di emergenza” utilizzati per recuperare un sistema dopo il danneggiamento di un disco, si utilizza vi perché è abbastanza ridotto in dimensioni da trovare facilmente posto su un dispositivo esterno e permette di affrontare quasi ogni tipo di modifica di testo.

Vi viene comunemente ritenuto piuttosto difficile per un nuovo utente (ovvero, vi presenta una curva di apprendimento non molto alta) a BSD e Unix perché è un editor modale.

Un editor modale (come ogni altro programma modale) assegna differenti azioni ai tasti a seconda della modalità attiva nel momento in cui vengono premuti. Le principali modalità di modifica in vi sono i modi insert (inserimento) e command (comando). In modalità inserimento, quando
si preme un tasto, il carattere digitato viene interpretato come appartenente al testo da inserire nell’editor e non come un comando, come invece accade nella modalità precedente.

Premendo il tasto ESC dalla modalità inserimento si può tornare in ogni momento alla modalità
comando; per passare invece in modalità inserimento si digita il carattere (comando) i: l’ingresso alla nuova modalità è segnalata dalla comparsa della scritta

— INSERT –.

Tornando alla modalità comando, sipossono distinguere comandi di solito più complessi che richiedono dapprima di digitare il carattere due-punti : seguiti a volte dalle altre
opzioni (come accade nelle funzionalità di ricerca e inserimento di untesto, anche se nei casi della citata operazione di undo :u o quella dicancellazione della riga corrente :d il comando è relativamente semplice), oppure senza i due punti (come accade ad esempio nel comando w
per la posizionare il cursore all’inizio della parola successiva a quella corrente).

Pro e contro dei programmi modali
In modalità comando, ad ogni carattere corrisponde un movimento del
cursore o una funzione di modifica (per esempio, con j il cursore si
sposta alla linea successiva, con k si sposta alla linea precedente, x
cancella un carattere e i (insert) o a (append) ritornano alla modalità
inserimento). Questa modalità, dal punto di vista dell’usabilità, è molto
più complessa di un qualsiasi programma ad interfaccia grafica, ma
esistono delle motivazioni per cui viene ancora usata.

Ai tasti premuti in modalità ‘comando’ non corrisponde in genere nessun carattere
visualizzato, salvo eccezioni quali, ad esempio “:” (il cursore) oppure “/”: questa è probabilmente uno dei maggiori motivi di confusione per i nuovi utilizzatori.

Alcuni comandi possono essere molto pericolosi: ad esempio, premendo la D
maiuscola si cancella la riga corrente dal cursore fino alla fine della
stessa e, se questo avviene inavvertitamente, può compromettere il lavoro
svolto o il file. Tuttavia, il comando :u è sempre utilizzabile per
annullare l’ultima operazione, dunque anche in caso di errore. È molto
arduo conoscere le funzionalità di un programma del genere senza un
manuale, a differenza dei programmi con menu grafici e barra degli
strumenti, dove sono rappresentate le funzionalità disponibili. In vi non
funzionano combinazioni di comandi molto comuni in altri contesti, come
CTRL-z per annullare l’ultima operazione. Nuove funzionalità vengono
aggiunte di rado.

Esistono delle situazioni in cui utilizzare un programma senza
interfaccia grafica è indispensabile, ovvero quando è necessario
modificare file remoti tramite l’uso del solo terminale. Tale operazione,
eseguita in locale, richiederebbe infatti lo scaricamento, la modifica ed
il reinvio dei file modificati, oppure l’attivazione di un’interfaccia
che permetta la modifica diretta in remoto, comunque più dispendiosa in
termini di risorse qualora le modifiche richieste siano minime (ad
esempio, il cambio di un’impostazione in un file di inizializzazione
.ini, o analogamente di un altro file di configurazione). L’uso di
programmi ad interfaccia grafica ovviamente richiede l’uso del mouse, i
cui movimenti devono essere inviati in tempo reale al server remoto.

Uno dei vantaggi di avere una modalità comando distinta dall’inserimento
del testo vero e proprio risiede nel fatto che più operazioni di modifica
possono essere fatte mediante una sola riga della tastiera senza dover
premere contemporaneamente i tasti Alt, Ctrl o altri modificatori, cosa
che riduce di almeno un fattore due il numero di tasti da premere per
attivare le stesse funzioni base dell’editor. Inoltre, la modalità
separata fa sì che le operazioni di modifica più complesse si possano
ottenere giustapponendo più primitive semplici (per esempio, dw per
cancellare una parola, c2fa per cambiare il testo dal cursore presente in
corrispondenza della seconda “a”). C’è da considerare anche che la doppia
modalità consente l’uso del vi praticamente su qualsiasi tipo di
terminale, in quanto le sequenze di carattere associato a ciascuno di
essi variano (^? al posto di ^H per il backspace, ad esempio), mentre le
lettere dell’alfabeto e caratteri come “:” o “/” sono presenti su
qualunque tipo di tastiera. Per gli utilizzatori esperti, questo permette
un lavoro molto più veloce, anche perché è possibile utilizzare i comandi
di vi con la sola riga principale della tastiera, senza ad esempio dover
spostare le mani sui tasti freccia. In molte versioni di vi comunque è
possibile utilizzare anch’essi per spostarsi all’interno del testo in
qualsiasi modalità, così come anche BACKSPACE o CANC per cancellare
testo; tali tasti potrebbero però non funzionare se si utilizza vi da
terminali remoti.

Manipolazione del testo
Ricerca e sostituzione di parole e stringhe
Un punto di forza nell’uso di vi è dovuto alla potenza espressiva ed
operativa delle funzioni di ricerca e sostituzione basate sull’uso di
espressioni regolari, ereditate in gran parte dall’editor ex, ed attivate
utilizzando i comandi / e: che ridirigono il cursore sull’ultima linea
della finestra per introdurre i dati per la ricerca/sostituzione. Questo
consente ad un utente esperto di ottenere con un solo comando operazioni
che in editor tradizionali potrebbero richiedere anche centinaia di
azioni elementari. Per esempio, un’operazione come quella di trasformare
in un testo tutte le parole isolate “if” in “IF” (delimitate queste da
‘<‘ e ‘\>’) ignorando i caratteri interni ad altre parole si ottiene
digitando semplicemente, in modalità comando:

:g/\<if\>/s//IF/g
oppure, ancor più semplicemente, il comando di sostituzione (g) applicato
alla stringa (%s, ovvero “sostituzione”) da rimpiazzare (if) con la
stringa nuova (IF)[1]:

:%s/if/IF/g

Copia e incolla di testi lunghi
È possibile anche compiere operazioni di copia-e-incolla. Ad esempio, in
modalità comando, è possibile selezionare una o più righe contigue
tramite il comando V. Dopo la selezione è possibile la cancellazione
(tramite il comando d) o il paste (tramite il comando p). Senza uscire
dalla modalità comando, è possibile utilizzare le funzioni per spostarsi
all’interno del testo tra la fase di copia e quella di incolla. Lo
spostamento, oltre a quelli nelle 4 direzioni, consente di arrivare
direttamente ad una riga, oppure alla fine del testo (tramite il comando
G). Ad esempio, per andare direttamente alla riga 257 del file (in
modalità comando):

/ 5
Grazie per aver votato!

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?