Comandi vi di Linux: le 3 modalità di Vim e la modalità visuale

Aprire vi e scoprire che non compare niente di quello che scrivi, o chiudere la finestra perché non sai come uscire: quasi tutti quelli che toccano un server per la prima volta ci passano una volta. Il comando vi di Linux ha la modalità normale e quella di inserimento separate, quindi appena sai in quale sei, il resto sono pochi tasti. Questo articolo raccoglie in tabelle le tre modalità e i comandi di ciascuna, e puoi provare vi tu stesso su un server virtuale nel browser.
Su AlmaLinux 9.8 vi e vim vengono entrambi dal pacchetto vim 8.2, e le schermate e i messaggi di questo articolo sono stati aperti con vim. Se non è installato, installalo con [dnf -y install vim-enhanced].
✅ Le tre modalità di vi
In vi lo stesso tasto fa cose diverse secondo la modalità. Il file si apre in modalità normale; i ti porta in modalità inserimento per scrivere, Esc ti riporta indietro e i due punti [:] ti portano nella modalità riga di comando per salvare e uscire.
| Modalità | Tasto per entrare | Compito |
|---|---|---|
| Modalità normale | Dove parte vi · Esc da qualsiasi altra modalità | Spostare il cursore, eliminare, copiare, incollare, annullare |
| Modalità inserimento | i a I A o O | Scrivere testo. [-- INSERT --] in fondo allo schermo |
| Modalità riga di comando | : | Salvare, uscire, sostituire, numeri di riga. In fondo allo schermo compare un : |
| Modalità visuale | v V Ctrl-v | Selezionare un intervallo e poi eliminare, copiare o inserire su tutte le righe |
Ci sono tre modi per aprire un file dalla console.
| Comando | Descrizione |
|---|---|
| vi nomefile | Apre il file in modalità normale. Se il file non esiste viene creato e compare [New] |
| vi +20 nomefile | Apre con il cursore sulla riga 20 |
| view nomefile= vi -R | Apre in sola lettura. Modificando compare l'avviso [W10], salvando [E45] |
Digita [vi httpd.conf] sul server virtuale qui sotto per aprire vi, e il menu a sinistra passa ai comandi interni di vi. Facendo clic su un chip quel tasto va sullo schermo, oppure puoi scriverlo con la tastiera.
✅ Riepilogo dei comandi vi di Linux
🔲 Spostare il cursore
| Tasto | Descrizione |
|---|---|
| h j k l← ↓ ↑ → | Sposta di un carattere. Funzionano anche le frecce |
| 0 · ^ | Inizio della riga (0) · primo carattere non vuoto (^) |
| $ | Fine della riga |
| w · b · e | Inizio della parola successiva · inizio della parola precedente · fine della parola successiva |
| gg · G | Prima riga · ultima riga del file |
| 20Gcome :20 | Va alla riga 20. Cambia il numero per un'altra riga |
| H · M · L | Riga in alto · al centro · in basso dello schermo |
| Ctrl-f · Ctrl-b | Una schermata giù · su |
| Ctrl-d · Ctrl-u | Mezza schermata giù · su |
🔲 Entrare in modalità inserimento
Qualunque tasto usi per entrare, premi Esc quando hai finito di scrivere. cw, cc, C e s cancellano e ti mettono subito in modalità inserimento, quindi correggere una parola o una riga è più rapido che premere x e i separatamente.
| Tasto | Descrizione |
|---|---|
| i · a | Iniziare a scrivere prima (i) · dopo (a) il cursore |
| I · A | Iniziare a scrivere all'inizio (I) · alla fine (A) della riga |
| o · O | Aprire una riga vuota sotto (o) · sopra (O) e scrivere |
| cw | Cancellare dal cursore alla fine della parola e scrivere |
| cc | Cancellare l'intera riga e scrivere |
| C | Cancellare dal cursore alla fine della riga e scrivere |
| s | Cancellare un carattere e scrivere |
| Esc | Smettere di scrivere e tornare alla modalità normale |
🔲 Eliminare e modificare
Metti un tasto di movimento dopo d e quell'intervallo viene cancellato. dw cancella una parola, dd una riga, dG tutto fino alla fine del file, e un numero davanti lo ripete altrettante volte.
| Tasto | Descrizione |
|---|---|
| x · X | Cancellare il carattere sotto (x) · prima (X) del cursore. 3x ne cancella tre |
| dw | Cancellare dal cursore alla fine della parola |
| dd | Cancellare la riga. 3dd ne cancella tre |
| D= d$ | Cancellare dal cursore alla fine della riga |
| d0 | Cancellare dall'inizio della riga fino al cursore |
| dG | Cancellare dalla riga corrente alla fine del file |
| :6d · :6,10d | Cancellare la riga 6 · cancellare le righe 6–10 |
| J | Unire la riga successiva alla fine di quella corrente |
| r | Sostituire il carattere sotto il cursore con il prossimo tasto premuto |
| ~ | Alternare maiuscolo/minuscolo |
| >> · << | Indentare · ridurre l'indentazione della riga |
🔲 Copiare, incollare e annullare
Il testo cancellato si incolla con p come quello copiato, quindi dd seguito da p sposta una riga in basso. u torna indietro di più modifiche, e Ctrl-r rifà ciò che hai annullato.
| Tasto | Descrizione |
|---|---|
| yy | Copiare la riga. 3yy ne copia tre |
| yw | Copiare dal cursore alla fine della parola |
| p · P | Incollare sotto (p) · sopra (P). Per una copia a caratteri, dopo · prima del cursore |
| :1 co 7come :1 t 7 | Copiare la riga 1 sotto la riga 7 |
| :1,7 co 8 | Copiare le righe 1–7 sotto la riga 8 |
| :1 m 8 | Spostare la riga 1 sotto la riga 8 |
| u | Annullare. Premi ancora per continuare a tornare indietro |
| Ctrl-r | Rifare ciò che hai annullato |
| . | Ripetere l'ultima modifica |
🔲 Cercare e sostituire
La sostituzione si fa nella modalità riga di comando. Senza intervallo vale solo per la riga corrente, [%] copre l'intero file e senza g alla fine cambia solo la prima occorrenza di ogni riga.
| Tasto | Descrizione |
|---|---|
| /testo | Cerca verso il basso dal cursore. Alla fine riprende dall'inizio: [search hit BOTTOM, continuing at TOP] |
| ?testo | Cerca verso l'alto dal cursore |
| n · N | Occorrenza successiva nella stessa direzione (n) · in direzione opposta (N) |
| * | Cercare verso il basso la parola sotto il cursore |
| :s/old/new/ | Primo old della riga corrente in new |
| :s/old/new/g | Tutti gli old della riga corrente in new |
| :%s/old/new/g | Tutti gli old dell'intero file in new |
| :10,20s/old/new/g | Tutti gli old delle righe 10–20 in new |
| :%s/old/new/gc | Chiedere prima di ogni modifica (y cambia · n salta · a tutte · q basta) |
🔲 Salvare, uscire e numeri di riga
| Tasto | Descrizione |
|---|---|
| :w | Salvare. Al termine: [36L, 1094B written] |
| :w nomefile | Salvare con un altro nome. Il file originale resta com'è |
| :wq= :x = ZZ | Salvare e uscire |
| :q | Uscire. Se ci sono modifiche non salvate: [E37: No write since last change] |
| :q! | Uscire senza salvare |
| :set nu · :set nonu | Mostrare · nascondere i numeri di riga |
✅ Commentare una colonna con la modalità visuale a blocchi di Vim
Per mettere lo stesso testo all'inizio di più righe, usa la modalità visuale a blocchi invece di premere i su ogni riga. In modalità normale v seleziona per carattere, Shift-v per riga e Ctrl-v per colonna.
Ecco come commentare un intero blocco di un file di configurazione. Metti il cursore sul primo carattere della prima riga, premi Ctrl-v, scendi con j per selezionare le righe, poi premi I, digita # e premi Esc.



Togliere i commenti funziona allo stesso modo. Metti il cursore sul # della prima riga, seleziona verso il basso con Ctrl-v, premi x e la colonna selezionata sparisce in un colpo. Puoi provarlo così su vhost.conf nel simulatore qui sopra.
ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.