Due modalità, e il motivo per cui ci si resta intrappolati
vi è l’unico editor che trovi garantito su qualunque sistema Linux, compresa un’installazione minima o una macchina avviata in emergenza. Su quasi tutte le distribuzioni moderne il comando vi è in realtà vim, che è compatibile all’indietro: Debian e Ubuntu lo forniscono col pacchetto vim-tiny, Red Hat e Fedora con vim-minimal. Per l’esame la differenza non conta, i tasti sono gli stessi.
Si apre con vi percorso/del/file. Con vi +9 /etc/fstab il cursore parte dalla riga 9; con vi + /etc/fstab, cioè con il più da solo, dall’ultima riga.
Quello che spiazza chi arriva da altri editor è che vi non parte in scrittura. Le modalità sono due:
- normale, detta anche modalità comando: è quella iniziale e ogni tasto premuto è un comando, non un carattere da inserire;
- inserimento: quello che digiti finisce nel testo.
Si entra in inserimento con un comando di inserimento e si torna in modalità normale con Esc. Se non sai in quale delle due sei, premi Esc: da lì tutto è recuperabile. Sempre dalla modalità normale si raggiungono i comandi con i due punti, che compaiono in fondo allo schermo.
Muoversi senza usare le frecce
h j k l sinistra, giù, su, destra
0 $ inizio e fine della riga
w b e parola avanti, parola indietro, fine della parola
( ) inizio e fine della frase
{ } inizio e fine del paragrafo
1G G prima e ultima riga del documento
Ctrl-B Ctrl-F schermata indietro, schermata avanti
/testo cerca in avanti
?testo cerca all'indietro
n N ripete la ricerca nello stesso verso o nel verso opposto
Le quattro lettere h j k l sono le prime da fissare, perché su una console seriale o dentro una sessione mal configurata le frecce possono non funzionare affatto. Quasi tutti i comandi accettano un numero come prefisso e vengono ripetuti altrettante volte: 5j scende di cinque righe.
Inserire, cancellare, copiare
i I inserisce prima del cursore / all'inizio della riga
a A inserisce dopo il cursore / alla fine della riga
o O apre una riga nuova sotto / sopra ed entra in inserimento
r sostituisce il solo carattere sotto il cursore
x cancella il carattere sotto il cursore
dd cancella la riga intera
dw cancella fino alla fine della parola
yy copia (yank) la riga intera
p P incolla dopo / prima della posizione corrente
u annulla l'ultima azione
Ctrl-R rifà l'azione annullata
Il prefisso numerico vale anche qui: 3yy copia tre righe, d5w cancella cinque parole, 5dd cancella cinque righe. Nota che d non butta via niente: ciò che cancelli finisce nello stesso buffer usato da y, quindi dd seguito da p è il modo standard di spostare una riga.
La differenza fra maiuscola e minuscola è sostanziale: i e I, a e A, o e O, p e P fanno cose diverse, e in una domanda a completamento la lettera va scritta con la cassa giusta.
I comandi con i due punti
Dalla modalità normale, il tasto : apre una riga in fondo allo schermo dove si scrivono i comandi più lunghi.
:w salva
:w! salva forzando la scrittura, se i permessi lo consentono
:q esce, ma si rifiuta se ci sono modifiche non salvate
:q! esce buttando via le modifiche
:wq salva ed esce
:x salva ed esce, ma scrive solo se il file è cambiato
:25 va alla riga 25
:s/vecchio/nuovo/g sostituisce nella riga corrente, con la sintassi di sed
:%s/vecchio/nuovo/g sostituisce in tutto il file
:set number numera le righe
:!comando esegue un comando di shell e torna nell'editor
Esistono anche due scorciatoie senza due punti, entrambe in maiuscolo: ZZ salva ed esce, ZQ esce senza salvare. ZZ, :w! e :q! sono nell’elenco ufficiale dell’obiettivo e vanno saputi a memoria, non riconosciuti in mezzo ad altre opzioni.
Gli altri editor e la variabile EDITOR
Non serve saperli usare, serve sapere che esistono e in che cosa differiscono.
GNU nano è l’alternativa più semplice: si scrive direttamente, e i comandi si danno con Ctrl. Ctrl-O salva, Ctrl-X esce, Ctrl-K taglia la riga, Ctrl-U incolla, Ctrl-W cerca. Le combinazioni sono stampate in fondo allo schermo, ed è il motivo per cui è l’editor da suggerire a chi arriva da Windows.
Emacs si comporta come nano quando si scrive, ma la navigazione è a comandi come in vi; Ctrl-x Ctrl-s salva e Ctrl-x Ctrl-c esce. È molto più di un editor: si usa anche come ambiente di sviluppo.
vim aggiunge a vi la colorazione della sintassi, l’annullamento a più livelli e il comando vimtutor, una guida interattiva che è il modo più rapido per prendere confidenza con i tasti.
Quando un comando ha bisogno di farti modificare un file — visudo è l’esempio classico — apre l’editor indicato dalle variabili d’ambiente VISUAL e EDITOR, e in mancanza di entrambe ricade su vi. Per cambiarlo nella sessione corrente basta esportare la variabile:
$ export EDITOR=nano
Per renderlo permanente la riga va messa in ~/.bash_profile. Molti programmi consultano prima VISUAL e poi EDITOR, quindi se imposti solo la seconda e il comportamento non cambia, controlla che la prima non sia già valorizzata.