Vi e Vim: guida pratica all’editor modale da terminale

Guida moderna a Vi/Vim: modalità Normal/Insert/Visual/Command-line, movimenti, modifica, ricerca, sostituzioni, copia/incolla, undo, registri, configurazione minima e vimtutor.

Vi è uno di quegli strumenti che all’inizio sembrano progettati per punire l’utente e, qualche ora dopo, iniziano a mostrare una logica molto precisa. Il motivo è semplice: non è un editor “modeless”. La tastiera non serve sempre a inserire testo; a seconda della modalità, gli stessi tasti diventano comandi.

Vim, “Vi IMproved”, mantiene il modello di Vi e lo estende con molte funzioni aggiuntive. Su un server minimale possiamo incontrare vi, vim, vim-tiny oppure implementazioni compatibili differenti.

Le modalità

  • Normal: movimento e comandi;
  • Insert: inserimento testo;
  • Visual: selezione;
  • Command-line: comandi che iniziano con :, / o ?.

Esc riporta normalmente in Normal mode. Quando non sappiamo più dove siamo, è il tasto di ritorno a casa.

Aprire, scrivere, salvare

vim file.conf
vi file.conf

i     # inserisci prima del cursore
a     # inserisci dopo il cursore
o     # nuova riga sotto
O     # nuova riga sopra

:w    # salva
:q    # esci
:wq   # salva ed esci
:x    # salva se necessario ed esci
:q!   # abbandona le modifiche

Muoversi

h j k l    # sinistra, giù, su, destra
w          # parola successiva
b          # parola precedente
e          # fine parola
0          # inizio riga
^          # primo carattere non vuoto
$          # fine riga
gg         # prima riga
G          # ultima riga
42G        # riga 42

I numeri moltiplicano molti comandi: 5j scende di cinque righe, 3w avanza di tre parole.

Operatori + movimenti

Il salto concettuale arriva quando impariamo la grammatica operatore + movimento invece di memorizzare decine di scorciatoie.

d      # delete
c      # change
y      # yank/copia

dw     # cancella fino alla parola successiva
d$     # cancella fino a fine riga
dd     # cancella la riga
3dd    # cancella tre righe

cw     # modifica la parola
c$     # modifica fino a fine riga

yw     # copia una parola
yy     # copia una riga

Incollare, undo e ripetizione

p       # incolla dopo
P       # incolla prima
u       # undo
Ctrl-r  # redo
.       # ripeti l'ultima modifica

Ricerca: correzione importante rispetto alla vecchia guida

Nel vecchio articolo del 2012 c’era un errore: per continuare una ricerca non si usano ; e ,. Questi ripetono movimenti basati su f/F/t/T. Per ripetere una ricerca usiamo n e N.

/errore
?errore
n
N
*
#

Sostituzioni

:s/vecchio/nuovo/
:s/vecchio/nuovo/g
:%s/vecchio/nuovo/g
:%s/vecchio/nuovo/gc

L’ultima forma chiede conferma per ogni sostituzione ed è spesso la più sicura quando modifichiamo configurazioni.

Visual mode

v       # selezione per caratteri
V       # selezione per righe
Ctrl-v  # selezione a blocco

Numeri di riga e opzioni utili

:set number
:set relativenumber
:set ignorecase
:set smartcase
:set hlsearch
:set incsearch

Registri

"ayy
"ap
:registers

Vim conserva testo copiato e cancellato in registri. Quelli clipboard dipendono da build e ambiente grafico.

Più file, buffer e finestre

vim file1 file2
:args
:next
:previous
:edit altro.conf

Un buffer rappresenta normalmente il contenuto di un file, una window è una vista su un buffer e una tab page organizza una o più window.

Il modo migliore per imparare

vimtutor

Il tutorial interattivo è molto più efficace di una lista di scorciatoie letta una volta e dimenticata.

Perché vale ancora la pena conoscerlo

Non è necessario usare Vim come IDE quotidiano. Ma saper aprire, modificare, cercare e salvare un file è estremamente utile via SSH, in rescue mode o su sistemi minimali.

Riferimenti

Vim documentation · dentro Vim: :help.