Globali

  • :h[elp] parola chiave - apri il manuale (di vim) per keyword
  • :sav[eas] file - salva il file con nome
  • :clo[se] - chiudi il pannello corrente
  • :ter[minal] - apri in una finestra di terminale
  • K - apri la pagina del manuale (man) relativa alla parola sotto al cursore
Tip Esegui vimtutor in un terminale per imparare i primi comandi Vim.

Movimento del cursore

  • h - muovi cursore a sinistra
  • j - muovi cursore in basso
  • k - muovi cursore in alto
  • l - muovi cursore a destra
  • gj - move cursor down (multi-line text)
  • gk - move cursor up (multi-line text)
  • H - vai in cima alla schermata
  • M - vai a metà della schermata
  • L - vai in fondo alla schermata
  • w - salta avanti fino all'inizio di una parola
  • W - salta avanti fino all'inizio di una parola (le parole possono contenere punteggiatura)
  • e - salta avanti fino alla fine di una parola
  • E - salta avanti fino alla fine di una parola (le parole possono contenere punteggiatura)
  • b - salta indietro fino all'inizio di una parola
  • B - salta indietro fino all'inizio di una parola (le parole possono contenere punteggiatura)
  • ge - saòta indietro alla fine della parola
  • gE - saòta indietro alla fine della parola (le parole possono contenere la punteggiatura)
  • % - vai al carattere corrispondente (le coppie supportate automaticamente sono: '()', '{}', '[]' - per ulteriori informazioni usa :h matchpairs in vim)
  • 0 - salta all'inizio della linea
  • ^ - salta fino al primo carattere non vuoto della linea
  • $ - salta alla fine della linea
  • g_ - salta fino all'ultimo carattere non vuoto della linea
  • gg - vai alla prima linea del documento
  • G - vai all'ultima linea del documento
  • 5gg or 5G - vai alla linea 5
  • gd - move to local declaration
  • gD - move to global declaration
  • fx - salta alla prossima occorrenza del carattere x
  • tx - salta a prima della prossima occorrenza del carattere x
  • Fx - salta all'occorrenza precedente del carattere x
  • Tx - salta al carattere successivo alla precedente occorrenza del carattere x
  • ; - ripeti l'ultimo movimento f, t, F o T
  • , - ripeti l'ultimo movimento f, t, F o T, all'indietro
  • } - salta al prossimo paragrafo (o funzione/blocco, se si scrive codice)
  • { - salta al paragrafo precedente (o funzione/blocco, se si scrive codice)
  • zz - centra il cursore nella schermata
  • zt - position cursor on top of the screen
  • zb - position cursor on bottom of the screen
  • Ctrl + e - sposta la schermata in basso di una linea (senza muovere il cursore)
  • Ctrl + y - sposta la schermata in alto di una linea (senza muovere il cursore)
  • Ctrl + b - sposta indietro di un'intera schermata
  • Ctrl + f - sposta avanti di un'intera schermata
  • Ctrl + d - sposta avanti di mezza schermata
  • Ctrl + u - sposta indietro di mezza schermata
Tip Anteponi un comando di movimento del cursore con un numero per ripeterlo. Per esempio, 4j muove in basso di 4 linee.

Modalità inserimento - inserisci/aggiungi testo

  • i - inserisci prima del cursore
  • I - inserisci all'inizio della linea
  • a - inserisci (aggiungi) dopo il cursore
  • A - inserisci (aggiungi) alla fine della linea
  • o - aggiungi (apri) una nuova linea sotto la linea corrente
  • O - aggiungi (apri) una nuova linea sopra la linea corrente
  • ea - inserisci (aggiungi) alla fine della parola
  • Ctrl + h - elimina un carattere prima del cursore durante la modalità inserimento
  • Ctrl + w - elimina una parola prima del cursore durante la modalità inserimento
  • Ctrl + j - inizia nuova linea nella fase di inserimento
  • Ctrl + t - indenta (spostamento a destra) una linea nella fase di inserimento
  • Ctrl + d - de-indenta (spostamento a sinistra) una linea nella fase di inserimento
  • Ctrl + n - inserimento (auto completamento) nel match successivo prima del cursore nella fase di inserimento
  • Ctrl + p - inserimento (auto completamento) nel match precedente prima del cursore nella fase di inserimento
  • Ctrl + rx - inserimento del contenuto del registro x
  • Ctrl + ox - Temporaneamente entra in modalità normale per eseguire un comando x.
  • Esc or Ctrl + c - esci dalla modalità inserimento

Modifica

  • r - sostituisci un singolo carattere
  • R - replace more than one character, until ESC is pressed.
  • J - unisci la linea sottostante con quella corrente
  • gJ - unisci la linea sottostante con quella corrente senza spazi in mezzo
  • gwip - riformatta paragrafo
  • g~ - cambia carattere maiuscolo in movimento
  • gu - cambia il carattere minuscolo in maiuscolo, in movimento
  • gU - cambia il carattere maiuscolo in minuscolo, in movimento
  • cc - cambia (sostituisci) l'intera linea
  • c$ or C - cambia (sostituisci) fino alla fine della linea
  • ciw - cambia (sostituisci) una parola intera
  • cw or ce - cambia (sostituisci) fino alla fine della parola
  • s - cancella carattere e sostituisci testo
  • S - cancella linea e sostituisci testo (uguale a cc)
  • xp - scambia due lettere (cancella e incolla)
  • u - annulla l'ultima modifica
  • U - Recupera (rifai) l' ultima linea cambiata
  • Ctrl + r - ripeti l'ultima modifica
  • . - ripeti l'ultimo comando

Seleziona testo (modalità visuale)

  • v - inizia modalità visuale, seleziona linee, quindi esegui un comando (per esempio y-copia)
  • V - inizia modalità visuale su linee intere
  • o - vai all'altro capo dell'area selezionata
  • Ctrl + v - inizia modalità visuale su blocchi
  • O - vai ad un altro angolo del blocco
  • aw - seleziona una parola
  • ab - un blocco con ()
  • aB - un blocco con {}
  • at - a block with <> tags
  • ib - un blocco con () (parentesi escluse)
  • iB - un blocco con {} (parentesi escluse)
  • it - blocco interno tra <> tags
  • Esc or Ctrl + c - esci dalla modalità visuale
Tip Invece di b o B puoi usare ( o { rispettivamente.

Comandi della modalità visuale

  • > - scorri testo a destra
  • < - scorri testo a sinistra
  • y - copia testo selezionato
  • d - elimina testo selezionato
  • ~ - inverti maiuscole e minuscole
  • u - cambio marcatore di testo a minuscolo
  • U - cambio marcatore di testo a maiuscolo

Registri

  • :reg[isters] - mostra il contenuto dei registri
  • "xy - copia dentro al registro <code>x</code>
  • "xp - incolla il contenuto del registro <code>x</code>
  • "+y - taglia dentro il registro della clipboard di sistema
  • "+p - incolla dal registro della clipboard di sistema
Tip I registri sono salvati in ~/.viminfo e saranno ricaricati al prossimo avvio di vim.
Tip Registri speciali:

0 - ultimo strappo
" - registri senza nome , ultimo eliminato o tirato
% - nome del file attuale
# - nome del file alternativo
* - contenuto della clipboard (X11 primaria)
+ - contenuto della clipboard (X11 clipboard)
/ - ultimo pattern di ricerca
: - ultimo comando eseguito
. - ultima linea inserita
- - ultima piccola (più piccola di una riga) cancellazione
= - registro di espressione
_ - registro di buco nero

Segnalibri

  • :marks - elenca i segnalibri
  • ma - imposta il segnalibro <code>A</code> alla posizione corrente
  • `a - salta alla posizione del segnalibro <code>A</code>
  • y`a - copia il testo fino alla posizione del segnalibro <code>A</code>
  • `0 - vai all' ultima posizione dove vim è uscito
  • `" - vai alla posizione quando l' ultima modifica nel file
  • `. - vai alla posizione dell' ultima modifica nel file
  • `` - vai alla posizione prima dell' ultimo salto
  • :ju[mps] - lista di salti
  • Ctrl + i - vai ad una nuova posizione nella lista dei salti
  • Ctrl + o - vai ad una vecchia posizione nella lista dei salti
  • :changes - lista di cambiamenti
  • g, - vai ad una nuova posizione nella lista dei cambiamenti
  • g; - vai ad una vecchia posizione nella lista dei cambiamenti
  • Ctrl + ] - salta al tag sotto il cursore
Tip Per saltare ad un punto puoi usare un accento grave (`) o un apostrofo ('). Usando un apostrofo salti direttamente all' inizio (primo carattere non vuoto) della linea tenuto dal punto.

Macro

  • qa - registra la macro <code>a</code>
  • q - smetti di registrare macro
  • @a - esegui la macro <code>a</code>
  • @@ - esegui di nuovo l'ultima macro eseguita

Taglia e incolla

  • yy - copia una linea
  • 2yy - copia due linee
  • yw - copia una parola
  • yiw - copia la parola sotto il cursore
  • yaw - copia la parola sotto il cursore e lo spazio prima o dopo
  • y$ or Y - copia fino alla fine della linea
  • p - incolla dopo il cursore
  • P - incolla prima del cursore
  • gp - put (paste) the clipboard after cursor and leave cursor after the new text
  • gP - put (paste) before cursor and leave cursor after the new text
  • dd - cancella (taglia) una linea
  • 2dd - cancella (taglia) due linee
  • dw - cancella (taglia) una parola
  • diw - cancella (taglia) la parola sotto il cursore
  • daw - cancella (taglia) la parola sotto il cursore e lo spazio prima o dopo
  • :3,5d - delete lines starting from 3 to 5
Tip You can also use the following characters to specify the range:
e.g.

:.,$d - From the current line to the end of the file
:.,1d - From the current line to the beginning of the file
:10,$d - From the 10th line to the beginning of the file

  • :g/{pattern}/d - delete all lines containing pattern
  • :g!/{pattern}/d - delete all lines not containing pattern
  • d$ or D - cancella (taglia) fino alla fine della linea
  • x - cancella (taglia) carattere

Indent text

  • >> - indenta una linea ( muovi a destra) shiftwidth
  • << - deindenta (muovi a sinistra) una linea shiftwidth
  • >% - indenta un blocco compreso tra () o {} (cursore nelle parentesi)
  • <% - de-indent a block with () or {} (cursor on brace)
  • >ib - indenta un blocco interno compreso tra ()
  • >at - indenta un blocco compreso tra tag <>
  • 3== - re indenta tre linee
  • =% - reindenta un blocco compreso tra () o {} (cursore nelle parentesi)
  • =iB - reindenta il blocco interno compreso tra {}
  • gg=G - reindenta l' intero buffer
  • ]p - incolla e aggiusta l' indenzione della linea attuale

Uscire

  • :w - scrivi (salva) il file, ma non uscire
  • :w !sudo tee % - scrivi il file corrente usando sudo
  • :wq or :x or ZZ - scrivi (salva) ed esci
  • :q - esci (fallisce se ci sono modifiche non salvate)
  • :q! or ZQ - esci e ignora modifiche non salvate
  • :wqa - scrivi (salva) ed esci su tutti i tab

Cerca e sostituisci

  • /pattern - cerca pattern
  • ?pattern - cerca pattern all'indietro
  • \vpattern - pattern 'very magic': i caratteri non alfanumerici sono interpretati come simboli speciali di regex (nessun carattere di escape necessario)
  • n - ripeti ricerca nella stessa direzione
  • N - ripeti ricerca nella direzione opposta
  • :%s/old/new/g - sostituisci old con new in tutto il file
  • :%s/old/new/gc - sostituisci old con new in tutto il file senza chiedere conferma
  • :noh[lsearch] - rimuove l'evidenziazione dei risultati della ricerca

Cerca in più file

  • :vim[grep] /pattern/ {`{file}`} - cerca il pattern in più file
e.g. :vim[grep] /foo/ **/*
  • :cn[ext] - salta al prossimo risultato
  • :cp[revious] - salta al risultato precedente
  • :cope[n] - apri una finestra contenente la lista di risultati
  • :ccl[ose] - close the quickfix window

Tabs

  • :tabnew or :tabnew {page.words.file} - apri un file in un nuovo tab
  • Ctrl + wT - muovi la finestra corrente nel suo proprio tab
  • gt or :tabn[ext] - vai al tab successivo
  • gT or :tabp[revious] - vai al tab precedente
  • #gt - vai al tab numero #
  • :tabm[ove] # - muovi il tab corrente nella #-esima posizione (l'indice parte da 0)
  • :tabc[lose] - chiudi il tab corrente e tutte le sue finestre
  • :tabo[nly] - chiudi tutti i tab tranne quello corrente
  • :tabdo command - esegui il comando in tutti i tab (es. :tabdo q - chiude tutti i tab aperti)

Lavorare con file multipli

  • :e[dit] file - modifica file in un nuovo buffer
  • :bn[ext] - vai al buffer successivo
  • :bp[revious] - vai al buffer precedente
  • :bd[elete] - cancella un buffer (chiudi un file)
  • :b[uffer]# - vai al buffer numero #
  • :b[uffer] file - vai al buffer per file
  • :ls or :buffers - elenca tutti i buffer aperti
  • :sp[lit] file - apri file in un nuovo buffer e dividi la finestra
  • :vs[plit] file - apri file in un nuovo buffer e dividi la finestra verticalmente
  • :vert[ical] ba[ll] - rendi i buffer come schermate verticali
  • :tab ba[ll] - rendi i buffer come delle tab
  • Ctrl + ws - dividi finestra
  • Ctrl + wv - dividi finestra verticalmente
  • Ctrl + ww - cambia finestra
  • Ctrl + wq - esci da una finestra
  • Ctrl + wx - scambia la finestra attuale con la prossima
  • Ctrl + w= - rendi tutte le finestre con uguale altezza e larghezza
  • Ctrl + wh - muovi cursore sul buffer successivo (a destra)
  • Ctrl + wl - muovi cursore sul buffer precedente (a sinistra)
  • Ctrl + wj - muovi cursore sul buffer inferiore (divisione orizzontale)
  • Ctrl + wk - muovi cursore sul buffer superiore (divisione orizzontale)
  • Ctrl + wH - rendi la finestra attuale a tutta altezza nell' estrema sinistra (finestra verticale più a sinistra)
  • Ctrl + wL - rendi la finestra attuale a tutta altezza nell' estrema destra (finestra verticale più a destra)
  • Ctrl + wJ - rendi la finestra attuale a tutta larghezza in fondo (finestra orizzontale più in basso)
  • Ctrl + wK - rendi la finestra attuale a tutta larghezza in cima (finestra orizzontale più in alto)

Diff

  • zf - definisci manualmente la piegatura in movimento
  • zd - elimina la piegatura sotto il cursore
  • za - apri/chiudi la piegatura sotto il cursore
  • zo - apri la piegatura sotto il cursore
  • zc - chiudi la piegatura sotto il cursore
  • zr - riduci le piegature ad un livello
  • zm - piegare di più (close) tutte le pieghe ad un livello
  • zi - attiva/disattiva la modalità di piegatura
  • ]c - salta all' inizio della modifica successiva
  • [c - salta all' inizio della precedente modifica
  • do or :diffg[et] - ottieni le differenze da un altro buffer
  • dp or :diffpu[t] - inserisci le differenze in un altro buffer
  • :diffthis - rendi la finestra corrente parte del diff
  • :dif[fupdate] - aggiorna differenze
  • :diffo[ff] - spegni la modalità diff per la finestra corrente
Tip The commands per piegare (per esempio za) opera ad un livello. Per lavorare con tutti i livelli, usa i caratteri maiuscoli (per esempio zA).
Tip Per vedere la differenza dei files, si può entrare in modalità diff eseguendo il comando vimdiff nel terminale. È possibile aprirla anche con il comando git difftool.