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.