Comandi di vi
Allo scopo di imparare i comandi 'vi', occorre provarli.
Si consiglia di produrre un file su cui esercitarsi, p.es. come segue:
man bash > bash1.txt
vi bash1.txt
Comandi di inserimento
a
- dopo il carattere correntei
- prima del carattere correnteA
- a fine lineaI
- a inizio linea, prima del primo carattere significativoo
- in una nuova linea sottoO
- in una nuova linea sopra
Comandi di movimento semplice
I comandi di movimento sono molto importanti.
Tramite i comandi di movimento si compiono le operazioni di cut, copy e paste.
Comandi di movimento avanzato
Non sono indispensabili di primo acchito ma:
- risparmiano il numero di tasti digitati
- sono ideali per l'inserimento in macro
Comandi di salvataggio
I comandi di salvataggio sono per la maggior parte dei comandi ex
. Quando si digitano i due punti come comando, sientra in modalità ex:
- l'ultima linea del video contiene il comando
- sono possibili comandi anche lunghi terminati da
Invio
- per eventualmente interrompere il comando, battere
Esc
Comandi di salvataggio avanzato
Sono derivati dall'editor ex
. Quando si preme :
in modalità comando, si apre l'ultima linea dello schermo ed è possibile editare un comando esteso.
:w file
- salva tutto il file corrente con altro nome:1,5w file
- salva da riga 1 a 5:1,.w file
- salva da riga 1 a riga corrente:.,+5w file
- salva da riga corrente fino a 5 righe dopo:.,’aw file
- salva da riga corrente a riga marcata con a:r file
- inserisci file esterno dopo riga corrente
Operazioni sui file
Vi non sta editando il file vero, ma una sua copia. In caso di crash di sistema, al boot successivo è di solito possibile recuperare la precedente sessione di editazione del file temporaneo, con vi -r file
. I crash in RHEL non avvengono mai, ma è possibile che l'amministratore abbia compiuto uno shutdown veloce.
Il 'save' è in realtà un commit. tutti i cambiamenti effettuati vengono finalizzati nel file vero. Tutti i buffer di undo vengono azzerati.
Il salvare con altro nome è un'operazione diversa da altri editor: dopo tale operazione non abbiamo cambiato il nome del file corrente, ma prodotto uno snapshot sul file indicato. Stiamo ancora lavorando sul file originale.
Grande Warning
Uno dei comandi di salvataggio è ZZ
. Si chiama salvataggio condizionale: salva ed esce se il file è cambiato (aggiornando la data di modifica), esce solo se il file non è cambiayo (senza aggiornare la data di modifica).
Attenzione che se viene invece premuto Ctrl-Z
, e sono tasti vicini, il programma viene sospeso non terminato.
Esempio, sono stati dati i comandi:
vi zz
Ctrl-Z
vi zz
Compare un grosso messaggio di avvertimento, per esempio:
E325: ATTENTION
Found a swap file by the name ".zz.swp"
owned by: root dated: Tue Oct 15 12:07:41 2019
file name: /tmp/zz
modified: YES
user name: root host name: localhost.localdomain
process ID: 12217 (still running)
While opening file "zz"
(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r zz"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file ".zz.swp"
to avoid this message.
"zz" [New File]
Press ENTER or type command to continue
Il responso corretto, praticamente sempre, è:
- premere
Ctrl-C
per togliere il messaggio - digitare
:q!
per uscire dal vi senza salvare - usare il comando
jobs
per verificare la precedebte sessione sospesa - ripristinare in foreground la precedente sessione (cf. ultra, Controllo dei Job)
Solo in caso di shutdown o di crash, dare il comando vi -r nomefile
.