Vi (software)

viè uneditor di testocon interfaccia testuale perBSDeUnix.
Il nome deriva dalla più breve abbreviazione non ambigua del comandovisualinex(cioè <vi>). Questo comando commuta l'editor di lineaexin modalità visuale.Viinsieme adEmacsè stato uno dei protagonisti della cosiddettaguerra degli editor.
Il programma venne scritto daBill Joynel1976per una delle prime versioni diBSD.
Le prime versioni divinon davano indicazione della modalità utilizzata, e quindi era comune premere il tasto ESC solo per assicurarsi di essere in modalità comando (visegnala con un "beep" di esser già inmodalità comando, se si tenta di rientrarvi). Le versioni recenti dividanno indicazione del modo corrente nella linea di stato corrente o graficamente. Le versioni grafiche di vi (per esempiogvim) supportano l'utilizzo delmousee l'accesso ai comandi tramite menù grafici.
Successivamente, è diventato l'editor standardde factoperUnixed il preferito dagli utenti fino all'arrivo diEmacsdopo il1984. Ancora nel 2014vio uno dei suoi cloni può essere trovato in quasi tutte le versioni di Unix (laSingle UNIX Specificationindicavicome editor, quindi ogni sistema conforme alla specifica è dotato divi).
Ancora negli anni Duemila dunque,viè solitamente preinstallato nei sistemi Unix-like (ad esempio, sia le diverse versioni diLinux, cheMac Os).
È stato uno dei programmi più largamente usati dagli utenti Unix (secondo un sondaggio del1991suUsenetera preferito dalla metà dei votanti).
Per comodità, lo stesso programma parte in modalitàvioexa 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 lee-mailo piccole modifiche.
Viviene comunemente ritenuto piuttosto difficile per un nuovo utente (ovvero,vipresenta una curva di apprendimento piuttosto ripida) a BSD eUnixperché è uneditor modale.
Un editor modale (come ogni altroprogramma 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 modiinsert(inserimento) ecommand(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 tastoESCdalla modalità inserimento si può tornare in ogni momento alla modalità comando; per passare invece inmodalità inserimentosi digita il carattere (comando)i: l'ingresso alla nuova modalità è segnalata dalla comparsa della scritta-- INSERT --. Tornando alla modalità comando, si possono 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 un testo, anche se nei casi della citata operazione di undo:uo quella di cancellazione della riga corrente:dil comando è relativamente semplice), oppure senza i due punti (come accade ad esempio nel comandowper la posizionare il cursore all'inizio della parola successiva a quella corrente).
In modalità comando, ad ogni carattere corrisponde un movimento delcursoreo una funzione di modifica (per esempio, conjil cursore si sposta alla linea successiva, conksi sposta alla linea precedente,xcancella un carattere ei(insert) oa(append) ritornano alla modalità inserimento).
Questa modalità, dal punto di vista dell'usabilità, è molto più complessa di un qualsiasi programma adinterfaccia 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, comeCTRL-zper 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 tastiAlt,Ctrlo 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,dwper cancellare una parola,c2faper cambiare il testo dal cursore presente in corrispondenza della seconda "a"). C'è da considerare anche che la doppia modalità consente l'uso delvipraticamente 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 divicon la sola riga principale della tastiera, senza ad esempio dover spostare le mani sui tasti freccia. In molte versioni divicomunque è possibile utilizzare anch'essi per spostarsi all'interno del testo in qualsiasi modalità, così come ancheBACKSPACEoCANCper cancellare testo; tali tasti potrebbero però non funzionare se si utilizzavida terminali remoti.
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:
oppure, ancor più semplicemente, il comando di sostituzione (g) applicato alla stringa (%s, ovvero "sostituzione") da rimpiazzare (if) con la stringa nuova (IF):
È possibile anche compiere operazioni di copia-e-incolla. Ad esempio, in modalità comando, è possibile selezionare una o più righe contigue tramite il comandoV. Dopo la selezione è possibile la cancellazione (tramite il comandod) o ilpaste(tramite il comandop). Senza uscire dalla modalità comando, è possibile utilizzare le funzioni per spostarsi all'interno del testo tra la fase dicopiae quella diincolla. Lo spostamento, oltre a quelli nelle 4 direzioni, consente di arrivare direttamente ad una riga, oppure alla fine del testo (tramite il comandoG).
Ad esempio, per andare direttamente alla riga 257 del file (in modalità comando):
Posizionamento:
(n)G   sposta il cursore alla riga n (default ultima).
Ricerca:
Digitazione:
Eliminazione (qualunque cosa eliminata finisce nell'area di memoria):
Varie:
Salvataggio/Chiusura:
viè presente nellaEvans Hallall'Università della California.