Guida rapida ai comandi di Vim

Pubblicato il ven 11 marzo 2011 in howto • 6 min read

Vim logo

Vim è uno degli editor di testi più diffuso in ambito *nix, esistono anche gli eseguibili per MS Windows e Apple. Si trova quasi sempre preinstallato nella maggior parte delle distro Gnu/Linux, ha il pregio di occupare pochissime risorse di sistema e di essere altamente configurabile dall’utente. La versione per Windows occupa appena 1,3Mb e non richiede alcuna installazione. Ciò permette di inserirlo in una chiavetta usb e averlo sempre disponibile, ovunque siamo.

L’editor Vim è un editor modale. Ciò significa che si comporterà diversamente a seconda del modo in cui vi trovate. I due modi principali si chiamano Normal mode ed Insert mode. In Normal mode i caratteri che scrivete sono comandi. In Insert mode gli stessi caratteri vengono inseriti come testo. Comunque per maggiori informazioni e per reperire l’ultima versione disponibile è bene visitare il sito ufficiale.

Movimenti di base del cursore

k / j   --> muovi il cursore in alto / basso
h / l   --> muovi il cursore a sinistra / destra
w   --> vai all'inizio della prossima parola
b   --> vai all'inizio della parola precedente
e   --> vai alla fine della parola successiva
W, B, E   --> come per w,b,e ma delimitata da spazi
( / )   --> vai all'inizio della frase sul cursore / successiva
{ / }   --> vai all'inizio del paragrafo sul cursore / successivo
0 / gm / $  --> vai all'inizio / metà / fine della riga sul cursore
^   --> vai al primo carattere "non spazio" della riga
+   --> vai al primo carattere "non spazio" della riga successiva
-   --> vai al primo carattere "non spazio" della riga precedente
n|   --> vai alla n-esima colonna della riga corrente
%   --> cerca la prossima parentesi, commento, define

Movimenti avanzati

G / 1G --> vai all'inizio / fine del file
n% --> posiziona il cursore al n% del file
nG --> vai alla riga n
H --> vai alla prima riga dello schermo
nH --> vai alla riga n dall'inizio dello schermo
M --> vai alla riga mediana dello schermo
L --> vai all'ultima riga dello schermo
[[ --> posiziona il cursore all'inizio della sezione precedente
]] --> posiziona il cursore all'inizio della sezione successiva
[] --> posiziona il cursore alla fine della sezione precedente
][ --> posiziona il cursore alla fine della sezione successiva
[( / ]) --> vai alla () non chiusa precedente / successiva
[{ / ]} --> vai alla {} non chiusa precedente / successiva
[* --> vai all'inizio del commento /**/ precedente
]* --> vai alla fine del commento /**/ successivo
CTRL e --> muovi lo schermo una linea in alto
CTRL y --> muovi lo schermo una linea in basso
CTRL b --> muovi lo schermo una pagina in alto
CTRL f --> muovi lo schermo una pagina in basso
z INVIO --> riga corrente come prima dello schermo
nz INVIO --> riga n del file come prima dello schermo
z. --> riga corrente come mediana dello schermo dello schermo
z- --> riga corrente come ultima dello schermo
z. / z- --> come z. e z- ma per riga generica n

Intervalli di selezione

:n,m   --> seleziona da riga n a riga m
:.   --> seleziona la riga corrente
:$   --> seleziona la fine del file
:'c   --> utilizza il marcatore c
:%   --> seleziona tutte le righe

Inserimento

i / a   --> inserisci prima / dopo del cursore
I / A   --> inserisci all'inizio / alla fine della riga
gI   --> inserisci nella prima colonna
o / O   --> inserisci una nuova riga sotto / sopra la riga corrente
notext ESC   --> inserisce n volte il testo text digitato
:r file INVIO   --> inserisci il contenuto di file nel documento
:r! comando INVIO   --> esegui il comando comando con output nel documento
:set ai INVIO   --> attiva l'auto indentazione
:set sw=n INVIO   --> imposta a n i caratteri di indentazione
<<   --> sposta a sinistra di un livello di indentazione
>>   --> sposta a destra di un livello di indentazione
n<< / n>>   --> come << o >> per n righe successive

Sostituzione

rc   --> sostituzione del carattere sotto al cursore con il carattere c
grc   --> come per rc ma in modalità inserimento
Rtext   --> sostituisce i caratteri che seguono con text
gRtext   --> come Rtext ma in modalita inserimento
s   --> cancella un carattere ed entra in modalità inserimento
S o cc  --> cancella la riga corrente ed entra in modalità inserimento
cw   --> cancella fino a fine parola ed entra in modalità inserimento
c$ o C   --> cancella fino a fine riga ed entra in modalità inserimento
~   --> inverti case maiuscolo / minuscolo e avanza cursore

Cancellazione

x / X   --> cancella il carattere sotto al / prima del cursore
nx / nx   --> come per x o X ma per n righe successive
dw   --> cancella fino alla fine della parola
ndw   --> cancella n parole seguenti
d$ o D   --> cancella fino alla fine della riga
dd   --> cancella tutta la riga
ndd   --> cancella n righe seguenti
J   --> unisce la riga che segue con quella corrente
gJ   --> come J senza modificare gli spazi
nJ / ngJ   --> come J o gJ ma per n righe
:rd INVIO   --> cancella le righe nell'intervallo r specificato
:rd x INVIO   --> muovi le righe nell'intervallo r nel registro x

Copia e Incolla

``x   --> usa il registro x (a-z) per le operazioni di copia e incolla
:reg INVIO   --> mostra il contenuto di tutti i registri
:reg x INVIO   --> mostra il contenuto del registro x (a-z)
yy o Y   --> copia la riga corrente nel registro attuale
p / P   --> incolla il contenuto del registro prima / dopo il cursore
]p / [p   --> come p / P ma con un livello di indentazione
gp / gP   --> come p / P con il cursore dopo il testo incollato

Trova e Sostituisci

fc / Fc   --> prosegui / torna indietro fino a raggiungere il carattere c
/stringa   --> cerca in avanti la sequanza stringa
?stringa   --> cerca indietro la sequanza stringa
n / N   --> ripeti la ricerca nella stessa / inversa direzione
#   --> cerca una precedente occorrenza della parola al cursore
*   --> cerca una occorrenza successiva della parola al cursore
g# / g*   --> come # e * ma anche con occorrenze parziali
:set ic INVIO   --> non considerare maiuscole o minuscole
:set noic INVIO   --> considera maiuscole e minucole
:rs/trova/cambia/<opzioni>   --> ricerca nel range r la stringa trova e sostituisci ogni occorrenza con la stringa cambia. 
    <opzioni> possono essere:
    g per la sostituzione di tutte le occorrenze, 
    c per la conferma di ogni singola sostituzione, 
    p per visualizzare le linee  modificate. 
    Il range r può contenere una linea di inizio e fine (es: 1,10) oppure simboli come . per la linea corrente e $ per fine file.

&   --> ripeti l'ultimo comando si selezione s
:g/seleziona/comando INVIO   --> trova la stringa seleziona e, per ogni riga che la contiene, esegui comando
:g/seleziona/s/trova/cambia INVIO   --> trova la stringa seleziona e, per ogni riga che la contiene, sostituisci trova con cambia

Annullamento comandi

u   --> annulla l'effetto dell'ultimo comando
U   --> riporta la linea corrente alla situazione precedente
.   --> ripeti ultima modifica

Gestione file

:w file INVIO   --> salva il documento con nome file
:w >> file INVIO   --> inserisci il contenuto del doc corrente all fine di file
:n,mw file INVIO   --> scrivi su file le righe da n a m
:x INVIO o :wq INVIO   --> esci e salva documento corrente
:q / :q!   --> esci senza salvare / forzatamente

Comandi vari

:help opzione INVIO   --> apre l'help su opzione
:sh INVIO   --> apre la shell di sistema. exit per tornare all'editor
:set INVIO   --> mostra le impostazioni attuali
:syntax on INVIO   --> attiva la sintassi evidenziata
:set textwidth=xx INVIO   --> xx max lunghezza della riga
:set number INVIO   --> numera le righe del documento
:color evening INVIO   --> usa lo schema di colori evening
vim -r file INVIO   --> (da shell) recupera file dopo un crash