I sistemi unix come ubuntu, debian, mint e mac osx sono distribuiti con un editor di testo integrato, chiamato vi (dall’inglese visual editor). Questo piccolo e semplice editor produce spesso un rapporto di odio/amore con gli utenti di sistemi linux che si ritrovano per qualche motivo a dover utilizzare la riga di comando per modificare un file testuale. Vi infatti è un editor molto essenziale nella sua “grafica”, ma contiene molte funzioni che spesso vengono ignorate da chi lo utilizza. Cerchiamo di capire un po’ come si usa e di scoprire qualche funzione utile.
Aprire vi, file esistente o nuovo file
Per aprire l’editor vi è necessario eseguire il comando vi seguito dal nome del file che vogliamo aprire.
vi informaticappunti.txt
In questo esempio stiamo aprendo un file che si chiama intofmaticappunti.txt
Se il file esiste nella directory corrente verrà aperto il file esistente, se non esiste un file con questo nome verrà aperto un nuovo file con il nome che abbiamo specificato.
La schermata che ci troveremo davanti sarà simile alla seguente:
In questo caso abbiamo creato un nuovo file, ci troveremo quindi davanti a un file vuoto, vi ci informerà nell’ultima riga del nome del file attualmente aperto e del fatto che si tratta di un nuovo file (New File).
Modalità di vi
In vi in ogni momento ci possiamo trovare in una di due diverse modalità:
- modalità comando (command mode)
- modalità inserimento (insert mode)
In modalità comandi, i tasti della tastiera (comprese lettere e numeri) consentono di muoversi all’interno del file ed eseguire delle operazioni di editing come cancellare caratteri, parole, intere righe, copiare e incollare pezzi di testo ecc…
Per attivare la modalità comando si può premere il tasto <esc> oppure la combinazione <ctrl> + c.
In modalità inserimento, come dice il nome, possiamo usare la tastiera per inserire testo all’interno del documento.
Per attivare la modalità inserimento quando siamo in modalità comandi basta premere il tasto i.
A differenza di tanti altri editor testuali, vi viene avviato in modalità comando.
Muoversi all’interno di un testo in vi
Per muovere il cursore in vi è necessario essere in modalità comando. Se abbiamo appena finito di inserire un testo siamo probabilmente ancora in modalità inserimento, possiamo quindi tornare alla modalità comando premendo <esc>. Se non siamo sicuri di quale modalità sia attiva basterà premere <esc> una o due volte finché non udiremo un bip che ci avvisa che siamo già in modalità comando.
Per muovere il cursore possiamo usare le frecce della tastiera oppure i quattro tasti h, j, k, l. L’effetto che avremo premendo questi 4 tasti è il seguente:
h | muovi il cursoreun carattere a sinistra |
l | muovi il cursore un carattere a destra |
k | muovi il cursore alla riga superiore |
j | muovi il cursore alla riga inferiore |
A differenza di molti editor di testo, quando il cursore arriva in fondo alla riga, premendo il tasto l non andremo all’inizio della riga seguente ma dovremo utilizzare j per muoverci verso il basso.
Modifiche di base
I comandi di editing del testo sono attivi in modalità comando. I comando sono case sensitive, ovvero fanno differenza fra l’uso di maiuscole e minuscole, come vedremo alcuni comandi hanno funzioni diverse se sono scritti con caratteri maiuscoli o minuscoli. Molti dei comandi che vedremo sono inoltre ripetibili più volte semplicemente indicando il numero di ripetizioni prima del comando.
Cancellare un carattere in vi
Per cancellare un carattere, basterà spostare il cursore sopra al carattere che vigliamo eliminare e premere
x
A questo punto il carattere evidenziato dal cursore sarà eliminato.
Per eliminare più di un carattere possiamo indicare a vi di ripetere il comando x. Per cancellare ad esempio 5 caratteri (quello evidenziato dal cursore e i successivi 4) basterà premere
4x
Come abbiamo detto poco fa, la differenza fra maiuscole e minuscole in vi è importante, per eliminare il carattere prima del cursore potremo infatti utilizzare la maiuscola:
X
Cancellare una parola in vi
Con vi è possibile cancellare intere parole, basterà posizionarsi con il cursore sulla prima lettera della parola che vogliamo cancellare e impartire il comando
dw
Questo comando (dall’inglese delete word) cancellerà la parola e lo spazio che la segue.
Anche in questo caso il comando dw può essere ripetuto automaticamente. Per cancellare ad esempio 5 parole basterà usare il comando
5dw
Cancellare una riga con vi
Per cancellare un’intera riga con vi, basterà usare il comando
dd
In questo caso non importa dove si trovi il cursore quando eseguiamo il comando, l’intera riga sarà cancellata e il cursore verrà posizionato al primo carattere della riga seguente.
Il comando dd, come i precedenti, è ripetibile, per cancellare 4 righe (quella su cui si trova il cursore e le 3 seguenti) dovremo digitare
4dd
Se invece volessimo cancellare solamente la parte di riga che va dalla posizione del cursore in poi, potremo utilizzare il comando maiuscolo
D
Modificare un carattere in vi
Per sostituire un carattere con un altro in vi possiamo agire direttamente in modalità comando:
- Posizionare il cursore sul carattere da sostituire
- Premere il tasto r
- Premere il nuovo carattere da inserire
A questo punto avrete sostituito il carattere con quello nuovo e sarete ancora in modalità comando.
Sostituire una parola in vi
In vi è possibile sostituire anche un’intera parola. Basterà posizionare il cursore sul primo carattere della parola che vogliamo sostituire e premere
cw
Premendo cw (dall’inglese change word) l’utimo carattere della parola che stiamo cancellando si trasformerà in un $ per segnalare la parte che verrà sostituita. A questo punto vi troverete in modalità inserimento e potremo digitare il nuovo testo. Il testo da inserire non dovrà essere per forza della stessa lunghezza del vecchio. Quando avremo terminato di digitare il nuovo testo basterà premere <esc> per eliminare eventuali caratteri residui e tornare alla modalità comando.
Come per gli altri comandi di sostituzione anche con cw possiamo cambiare più di una parola. Per cambiare 4 parole ad esempio useremo il comando
3cw
Sostituire una riga con vi
Con vi è possibile sostituire velocemente il contenuto di una riga a partire dalla posizione del cursore. In questo caso useremo comando composto da un carattere maiuscolo, basterà digitare
C
Comparirà a questo punto un simbolo $ alla fine della riga e saremo portati in modalità inserimento, possiamo quindi inserire il nuovo testo e poi premere <esc> per terminare l’inserimento e tornare in modalità comando.
Inserire testo con vi
Come abbiamo detto è possibile in ogni momento attivare la modalità inserimento premendo
i
potremo quindi procedere a inserire il nuovo testo (viene inserito prima della posizione del cursore) e quando avremo finito potremo tornare in modalità comando tramite <esc>.
Aggiungere una riga vuota in vi
Quando siamo in modalità comando è possibile aggiungere una nuova riga vuota, se vogliamo aggiungerla sotto la riga su cui si trova attualmente il cursore occorrerà digitare
o
In caso volessimo aggiungere la riga sopra la posizione del cursore utilizzeremo l’equivalente maiuscolo
O
Concatenare due righe in vi
In modalità comando è possibile anche concatenare due righe facendole diventare una sola. Dovremo posizionarci sulla prima riga da concatenare e premere
J
In questo caso si tratta del carattere maiuscolo in quanto, come abbiamo visto sopra il tasto j ha la funzione di spostare il cursore alla riga inferiore.
Anche in questo caso è possibile concatenare più di 2 righe alla volta ripetendo il comando
3J
Annullare l’ultima modifica in vi
Oramai siamo tutti abituati a poter sempre utilizzare <ctrl> + z per annullare l’ultima modifica quando stiamo modificando un testo o più in generale un file.
Nel caso di vi non possiamo utilizzare la famosa combinazione di tasti ma potremo comunque utilizzare il comando
u
La sua versione maiuscola invece ci permetterà di annullare tutte le modifiche fatte alla riga su cui si trova il cursore semplicemente digitando
U
Attenzione però che quest’ultimo comando funziona solamente finchè il cursore si trova su una determinata riga, appena toglierete il cursore da una riga, non potrete più utilizzare U per annullarne le modifiche.
Muoversi in un file con vi
In aggiunta ai comandi visti all’inizio, sono disponibili altri comandi che permettono di muoversi e scorrere un file quando siamo in modalità comando.
w | Avanti di una parola |
b | Indietro di una parola |
$ | Vai alla fine della riga corrente |
0 | (Zero) Vai all’inizio della riga corrente |
H | Vai alla prima riga della schermata attuale |
M | Vai alla riga centrale della schermata attuale |
L | Vai all’ultima riga della schermata attuale |
G | Vai all’ultima riga del file |
1G | Vai alla prima riga del file |
<ctrl> + f | Vai avanti di una schermata |
<ctrl> + b | Vai indietro di una schermata |
<ctrl> + d | Vai avanti di mezza schermata |
<ctrl> + u | Vai indietro di mezza schermata |
Usare la ricerca, cercare testo in vi
Specialmente quando apriamo file molto lunghi è molto comodo utilizzare la ricerca di vi per muoversi e trovare velocemente ciò che stiamo cercando.
In vi è possibile cercare sia in avanti rispetto alla posizione del cursore, che andando indietro a partire da dove si trova il cursore.
Per cercare dal cursore in poi dovremo:
- Premere il tasto /
- digitare il testo da cercare
- premere invio
Il cursore si muoverà alla prima occorrenza trovata.
Per cercare invece dal cursore verso l’alto dovremo:
- Premere il tasto ?
- digitare il testo da cercare
- premere invio
Una volta raggiunto il primo risultato, è possibile continuare a cercare nel file nella direzione in cui stavamo cercando premendo il tasto
n
Con il suo omologo maiuscolo invece continueremo a cercare nella direzione opposta a quella in cui stavamo cercando (utile nel caso in cui fossimo arrivati alla quarta occorrenza di un testo e volessimo tornare indietro alla terza). Basterà premere:
N
Salvare e chiudere un file con vi
Quando modifichiamo un file con vi, in realtà stiamo modificando una copia del file originale. Le modifiche vengono scritte sul file originale solamente quando decidiamo di salvarle.
Salvare un file e chiudere vi
Il caso più comune è quello di dover salvare le modifiche e chiudere il file. Possiamo eseguire questa operazione in modalità comando premendo 2 volte il tasto Z (maiuscola)
ZZ
Questo modo è il meno conosciuto ma il più veloce, in quanto prevede l’uso di 2 soli tasti (<shift> e z) premuti due volte.
Il metodo più conosciuto è quello di (sempre in modalità comando) digitare
:wq
e premere <invio>.
Salvare un file senza chiudere vi
Per salvare un file senza chiudere l’editor (se ad esempio vogliamo salvare le modifiche fatte fino a questo punto e continuare a fare ulteriori cambiamenti) possiamo digitare
:w
e premere <invio>
Chiudere vi senza salvare le modifiche
Con vi è possibile anche chiudere l’editor senza salvare le modifiche effettuate. Questo comando è particolarmente utile nelle occasioni in cui per sbaglio vi scappa qualche comando che modifica il testo e non avete modo di annullare le modifiche. Un’altra situazione in cui questo comando vi tornerà utile è quando aprite e modificate un file che però è in sola lettura, in questo modo riuscirete a chiudere l’editor senza che tenti di scrivere le modifice sul file a cui non avete accesso.
In questo caso basterà digitare
:q!
e premere <invio>.
Se volete leggere la documentazione ufficiale del comando vi potete trovarla qui: