In questo capitolo, capiremo come funziona l’editor vi in Unix. Ci sono molti modi per modificare i file in Unix. Modificare i file usando l’editor di testo orientato allo schermo vi è uno dei modi migliori. Questo editor ti permette di modificare le linee nel contesto di altre linee nel file.
Una versione migliorata dell’editor vi, chiamata VIM, è stata resa disponibile ora. Qui, VIM sta per Vi IMproved.
vi è generalmente considerato lo standard de facto negli editor Unix perché –
-
è solitamente disponibile su tutti i tipi di sistema Unix.
-
Le sue implementazioni sono molto simili tra loro.
-
Richiede poche risorse.
-
È più facile da usare di altri editor come l’ed o l’ex.
Puoi usare l’editor vi per modificare un file esistente o per creare un nuovo file da zero. Puoi anche usare questo editor per leggere semplicemente un file di testo.
Avviare l’editor vi
La seguente tabella elenca i comandi di base per usare l’editor vi –
Sr.No. | Comando & Descrizione | |
---|---|---|
1 |
vi filename Crea un nuovo file se già non esiste, altrimenti apre un file esistente. |
|
2 |
vi -R nomefile Apre un file esistente in sola lettura. |
|
3 |
view filename Apre un file esistente in sola lettura. |
Di seguito un esempio per creare un nuovo file testfile se non esiste già nella directory di lavoro corrente –
$vi testfile
Il comando precedente genererà il seguente output –
|~~~~~~~~~~~~"testfile"
Si noterà una tilde (~) su ogni linea dopo il cursore. Una tilde rappresenta una linea inutilizzata. Se una linea non inizia con una tilde e sembra essere vuota, c’è uno spazio, un tab, una newline, o qualche altro carattere non visibile presente.
Ora avete un file aperto su cui iniziare a lavorare. Prima di procedere oltre, cerchiamo di capire alcuni concetti importanti.
Modalità operative
Mentre si lavora con l’editor vi, di solito ci si imbatte nelle seguenti due modalità –
-
Modalità comando – Questa modalità permette di eseguire compiti amministrativi come salvare i file, eseguire i comandi, spostare il cursore, tagliare (yanking) e incollare le linee o parole, così come trovare e sostituire. In questa modalità, qualsiasi cosa si digiti viene interpretata come un comando.
-
Modalità inserimento – Questa modalità permette di inserire del testo nel file. Tutto ciò che viene digitato in questa modalità viene interpretato come input e inserito nel file.
vi inizia sempre in modalità comando. Per inserire del testo, devi essere nella modalità di inserimento per cui devi semplicemente digitare i. Per uscire dalla modalità di inserimento, premi il tasto Esc, che ti riporterà alla modalità di comando.
Suggerimento – Se non sei sicuro in quale modalità sei, premi il tasto Esc due volte; questo ti porterà alla modalità di comando. Apri un file usando l’editor vi. Inizia a digitare alcuni caratteri e poi vieni nella modalità di comando per capire la differenza.
Uscire da vi
Il comando per uscire da vi è :q. Una volta in modalità comando, digitate i due punti e ‘q’, seguito da return. Se il tuo file è stato modificato in qualche modo, l’editor ti avvertirà di questo, e non ti lascerà uscire. Per ignorare questo messaggio, il comando per uscire da vi senza salvare è :q! Questo ti permette di uscire da vi senza salvare nessuna delle modifiche.
Il comando per salvare il contenuto dell’editor è :w. Puoi combinare il comando di cui sopra con il comando quit, o usare :wq e return.
Il modo più semplice per salvare le tue modifiche e uscire da vi è con il comando ZZ. Quando siete in modalità comando, digitate ZZ. Il comando ZZ funziona allo stesso modo del comando :wq.
Se vuoi specificare un nome particolare per il file, puoi farlo specificandolo dopo :w. Per esempio, se volete salvare il file su cui state lavorando con un altro nome chiamato nomefile2, dovrete digitare :w nomefile2 e tornare indietro.
Muoversi all’interno di un file
Per muoversi all’interno di un file senza influenzare il vostro testo, dovete essere in modalità comando (premete Esc due volte). La seguente tabella elenca alcuni comandi che puoi usare per spostarti di un carattere alla volta –
Sr.No. | Comando & Descrizione | |
---|---|---|
1 |
k Sposta il cursore su una linea |
|
2 |
j Muove il cursore verso il basso di una linea |
|
3 |
h Sposta il cursore a sinistra di un carattere |
|
4 |
l Sposta il cursore a destra di un carattere a destra di un carattere |
I seguenti punti devono essere considerati per muoversi all’interno di un file –
-
vi è sensibile al maiuscolo/minuscolo.sensibile alle maiuscole e alle minuscole. Devi prestare attenzione alla maiuscola quando usi i comandi.
-
La maggior parte dei comandi in vi può essere preceduta dal numero di volte che vuoi che l’azione si verifichi. Per esempio, 2j sposta il cursore due linee più in basso della posizione del cursore.
Ci sono molti altri modi per muoversi all’interno di un file in vi. Ricorda che devi essere in modalità comando (premi Esc due volte). La seguente tabella elenca alcuni comandi per muoversi all’interno del file –
Di seguito è riportata la lista dei comandi per muoversi all’interno del file.
Sr.No. | Comando & Descrizione | |
---|---|---|
1 |
0 o & barra; Posiziona il cursore all’inizio di una linea |
|
2 |
Posiziona il cursore alla fine di una linea |
|
3 |
w Posiziona il cursore alla parola successiva |
|
4 |
b Posiziona il cursore alla parola parola |
|
5 |
( Posiziona il cursore all’inizio della frase corrente |
|
6 |
) Posiziona il cursore all’inizio della frase successiva |
|
7 |
E Si sposta alla fine della parola delimitata in bianco parola |
|
8 |
{ Sposta un paragrafo indietro |
|
9 |
} Sposta un paragrafo avanti |
|
10 |
] Muove una sezione in avanti |
|
12 |
n| Sposta alla colonna n nella linea corrente |
|
13 |
1G Sposta alla prima linea del file |
|
14 |
G Sposta all’ultima riga del file |
|
15 |
nG Si sposta all’ennesima riga del file |
|
16 |
:n Spostamento all’ennesima riga del file |
|
17 |
fc Spostamento in avanti a c |
|
18 |
Fc Spostamento indietro a c |
|
19 |
H Si sposta in cima allo schermo |
|
20 |
nH Si sposta all’ennesima riga dall’alto dello schermo |
|
21 |
M Si sposta al centro dello schermo |
|
22 |
L Sposta in la parte inferiore dello schermo |
|
23 |
nL Si sposta all’ennesima riga dal fondo dello schermo |
|
24 |
😡 Colon seguito da un numero posizionerà il cursore sul numero di linea rappresentato da x |
Comandi di controllo
I seguenti comandi possono essere usati con il tasto di controllo per eseguire le funzioni indicate nella tabella sottostante –
Di seguito è riportata la lista dei comandi di controllo.
Sr.No. | Comando & Descrizione | |
---|---|---|
CTRL+d Spostamento in avanti di 1/2 schermo |
||
CTRL+f Sposta in avanti di uno schermo intero |
||
3 |
CTRL+u Sposta indietro di 1/2 schermo |
|
4 |
CTRL+b Sposta indietro di uno schermo intero |
|
5 |
CTRL+e Sposta lo schermo in alto di una riga |
|
6 |
CTRL+y Muove lo schermo verso il basso di una linea |
|
CTRL+u Sposta lo schermo su di 1/2 pagina |
||
8 |
CTRL+d Sposta lo schermo in basso di 1/2 pagina |
|
9 |
CTRL+b Sposta lo schermo in alto di una pagina |
|
10 |
CTRL+f Sposta lo schermo in basso di una pagina |
|
11 |
CTRL+I Redraws the screen |
Modifica dei file
Per modificare il file, devi essere in modalità inserimento. Ci sono molti modi per entrare nella modalità di inserimento dalla modalità di comando –
Sr.No. | Comando & Descrizione | |
---|---|---|
1 |
i Inserisce il testo prima della posizione corrente del cursore |
|
2 |
I Inserisce il testo all’inizio della linea corrente |
|
3 |
a Inserisce il testo dopo la posizione corrente del cursore |
|
4 |
A Inserisce del testo alla fine della linea corrente |
|
5 |
o Crea una nuova linea per l’inserimento del testo sotto la posizione del cursore |
|
6 |
O Crea una nuova linea per l’inserimento del testo sopra la posizione del cursore |
Cancellazione caratteri
Qui c’è una lista di comandi importanti, che possono essere usati per cancellare caratteri e linee in un file aperto –
Sr.No. | Comando & Descrizione | |
---|---|---|
1 |
x Cancella il carattere sotto la posizione del cursore |
|
2 |
X Cancella il carattere prima della posizione del cursore |
|
3 |
dw Cancella dalla posizione corrente del cursore alla parola successiva |
|
4 |
d^ Cancella dalla posizione corrente del cursore all’inizio della riga |
|
5 |
d$ Cancella dalla posizione corrente del cursore alla fine della riga |
|
6 |
D Cancella dalla posizione del cursore alla fine della linea corrente |
|
7 |
dd Cancella la linea su cui si trova il cursore |
Come detto sopra, la maggior parte dei comandi in vi può essere preceduta dal numero di volte che si desidera che l’azione avvenga. Per esempio, 2x cancella due caratteri sotto la posizione del cursore e 2dd cancella due linee su cui si trova il cursore.
Si raccomanda di fare pratica con i comandi prima di procedere oltre.
Comandi di modifica
Si ha anche la possibilità di cambiare caratteri, parole o linee in vi senza cancellarli. Ecco i relativi comandi –
Sr.No. | Comando & Descrizione | |
---|---|---|
1 |
cc Rimuove il contenuto della linea, lasciandoti in modalità inserimento. |
|
2 |
cw Cambia la parola su cui si trova il cursore dal cursore alla w minuscola alla fine della parola. |
|
3 |
r Riposiziona il carattere sotto il cursore. vi ritorna al modo comando dopo che la sostituzione è stata inserita. |
|
4 |
R Scrive più caratteri a partire dal carattere attualmente sotto il cursore. Dovete usare Esc per fermare la sovrascrittura. |
|
5 |
s Sostituisce il carattere corrente con il carattere che digitate. Dopodiché, si rimane nel modo di inserimento. |
|
6 |
S Cancella la linea su cui si trova il cursore e la sostituisce con il nuovo testo. Dopo l’inserimento del nuovo testo, vi rimane in modalità di inserimento. |
Comandi di copia e incolla
È possibile copiare linee o parole da un posto e poi incollarle in un altro posto usando i seguenti comandi –
Sr.No. | Comando & Descrizione |
---|---|
1 |
yy Copia la riga corrente. |
2 |
yw Copia la parola corrente dal carattere su cui si trova il cursore w minuscolo, fino alla fine della parola. |
3 |
p Mette il testo copiato dopo il cursore. |
4 |
P> Mette il testo copiato prima del cursore. |
Comandi avanzati
Ci sono alcuni comandi avanzati che semplificano l’editing quotidiano e permettono un uso più efficiente di vi –
Di seguito la lista dei comandi avanzati.
Sr.No. | Comando & Descrizione | |
---|---|---|
1 |
J Collega la linea corrente con quella successiva. Un numero di comandi j unisce molte linee. |
|
2 |
<< Sposta la linea corrente a sinistra di una larghezza di spostamento. |
|
3 |
>> Sposta la linea corrente a destra di uno spostamento. |
|
4 |
~ Cambia il caso del carattere sotto il cursore. |
|
5 |
^G Premere i tasti Ctrl e G allo stesso tempo per mostrare il nome del file corrente e lo stato. |
|
6 |
U Ripristina la linea corrente allo stato in cui si trovava prima che il cursore entrasse nella linea. |
|
7 |
U Si tratta di annullare l’ultimo cambiamento fatto nel file. Digitando ‘u’ di nuovo si rifarà il cambiamento. |
|
8 |
J Collega la linea corrente con quella successiva. Un conteggio unisce tante linee. |
|
9 |
:f Visualizza la posizione corrente nel file in % e il nome del file, il numero totale del file. |
|
10 |
:f nome file Rinomina il file corrente in nome file. |
|
11 |
:w nome file Scrive in nome file. |
|
12 |
:e nome file Apre un altro file con nome file. |
|
13 |
:cd dirname Cambia la directory di lavoro corrente in dirname. |
|
14 |
:e # Cambia tra due file aperti. |
|
15 |
:n Nel caso in cui si aprano più file usando vi, usare :n per andare al prossimo file della serie. |
|
16 |
:p Nel caso si aprano più file usando vi, usare :p per andare al file precedente della serie. |
|
17 |
:N Nel caso in cui si aprano più file usando vi, usare :N per andare al file precedente nella serie. |
|
18 |
:r file Legge il file e lo inserisce dopo la linea corrente. |
|
19 |
:nr file Legge il file e lo inserisce dopo la linea n. |
Ricerca di parole e caratteri
L’editor vi ha due tipi di ricerca: stringa e carattere. Per una ricerca di stringa, si usano i comandi / e ? Quando si avviano questi comandi, il comando appena digitato verrà mostrato sull’ultima riga dello schermo, dove si digita la particolare stringa da cercare.
Questi due comandi differiscono solo nella direzione in cui avviene la ricerca –
-
Il comando / cerca in avanti (verso il basso) nel file.
-
Il comando ? cerca all’indietro (verso l’alto) nel file.
I comandi n e N ripetono il precedente comando di ricerca nella stessa direzione o in quella opposta, rispettivamente. Alcuni caratteri hanno un significato speciale. Questi caratteri devono essere preceduti da un backslash (\) per essere inclusi come parte dell’espressione di ricerca.
Sr.No. | Carattere &Descrizione | |
---|---|---|
1 |
^ Cerca all’inizio della linea (Usare all’inizio di una espressione di ricerca). |
|
2 |
Cerca un singolo carattere. |
|
3 |
* Cerca zero o più del carattere precedente. |
|
4 |
Fine riga (da usare alla fine dell’espressione di ricerca). |
|
5 |
[ Inizia una serie di espressioni corrispondenti o non corrispondenti. |
|
6 |
< Questo è messo in un’espressione sfuggita con il backslash per trovare la fine o l’inizio di una parola. |
|
7 |
> Questo aiuta a vedere la descrizione del carattere ‘<‘ sopra. |
La ricerca dei caratteri cerca all’interno di una linea per trovare un carattere inserito dopo il comando. I comandi f e F cercano un carattere solo sulla linea corrente. f cerca in avanti e F cerca all’indietro e il cursore si sposta nella posizione del carattere trovato.
I comandi t e T cercano un carattere solo sulla linea corrente, ma per t, il cursore si sposta nella posizione prima del carattere, e T cerca la linea all’indietro fino alla posizione dopo il carattere.
Comandi di impostazione
Puoi cambiare l’aspetto del tuo schermo vi usando i seguenti comandi :set. Una volta che sei in modalità comando, digita :set seguito da uno dei seguenti comandi.
Sr.No. | Comando & Descrizione | |
---|---|---|
1 |
:set ic Ignora il caso durante la ricerca |
|
2 |
:set ai Imposta il rientro automatico |
|
3 |
:set noai Imposta l’autoindentazione |
|
4 |
:set nu Visualizza le linee con i numeri di linea sul lato sinistro |
|
5 |
:set sw Imposta la larghezza di un tabstop software. Per esempio, potresti impostare una larghezza di spostamento di 4 con questo comando – :set sw = 4 |
|
6 |
:set ws Se wrapscan è impostato, e la parola non viene trovata in fondo al file, proverà a cercarla all’inizio |
|
7 |
:set wm Se questa opzione ha un valore maggiore di zero, l’editor farà automaticamente “word wrap”. Per esempio, per impostare il margine a capo a due caratteri, si dovrebbe digitare questo: :set wm = 2 |
|
:set ro Cambia il tipo di file in “sola lettura” |
||
9 |
:set term Stampa il tipo di terminale |
|
10 |
:set bf Scarta i caratteri di controllo dall’input |
Eseguire i comandi
Il vi ha la capacità di eseguire comandi dall’interno dell’editor. Per eseguire un comando, devi solo andare in modalità comando e digitare :! command.
Per esempio, se vuoi controllare se un file esiste prima di provare a salvare il tuo file con quel nome, puoi digitare :! ls e vedrai l’output di ls sullo schermo.
Puoi premere qualsiasi tasto (o la sequenza di escape del comando) per tornare alla tua sessione vi.
Sostituzione del testo
Il comando di sostituzione (:s/) ti permette di sostituire rapidamente parole o gruppi di parole all’interno dei tuoi file. Ecco la sintassi per sostituire il testo –
:s/search/replace/g
La g sta per globalmente. Il risultato di questo comando è che tutte le occorrenze sulla linea del cursore vengono cambiate.
Punti importanti da notare
I seguenti punti contribuiranno al tuo successo con vi –
-
Devi essere in modalità comando per usare i comandi. (Premi Esc due volte in qualsiasi momento per assicurarti di essere in modalità comando.)
-
Devi fare attenzione ai comandi. Questi sono sensibili al maiuscolo/minuscolo.
-
Devi essere in modalità inserimento per inserire il testo.