Guida rapida ai comandi di Vim
Pubblicato il ven 11 marzo 2011 in howto • 6 min read
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