Check out one of my other projects 👉 weekend.dev!

Globali

  • :h[elp] parola chiave - apri il manuale (di vim) per <code>keyword</code>
  • :sav[eas] file - salva il file con nome
  • :clo[se] - chiudi il pannello corrente
  • :ter[minal] - open a terminal window
  • K - apri la pagina del manuale (man) relativa alla parola sotto al cursore
Tip Run vimtutor in a terminal to learn the first Vim commands.

Movimento del cursore

  • h - muovi cursore a sinistra
  • j - muovi cursore in basso
  • k - muovi cursore in alto
  • l - muovi cursore a destra
  • 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)
  • % - 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
  • 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
  • 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 - delete the character before the cursor during insert mode
  • Ctrl + w - delete word before the cursor during insert mode
  • Ctrl + j - begin new line during insert mode
  • Ctrl + t - indent (move right) line one shiftwidth during insert mode
  • Ctrl + d - de-indent (move left) line one shiftwidth during insert mode
  • Ctrl + n - insert (auto-complete) next match before the cursor during insert mode
  • Ctrl + p - insert (auto-complete) previous match before the cursor during insert mode
  • Esc - esci dalla modalità inserimento

Modifica

  • r - sostituisci un singolo carattere
  • J - unisci la linea sottostante con quella corrente
  • gJ - unisci la linea sottostante con quella corrente senza spazi in mezzo
  • gwip - riformatta paragrafo
  • g~ - switch case up to motion
  • gu - change to lowercase up to motion
  • gU - change to uppercase up to motion
  • cc - cambia (sostituisci) l'intera linea
  • C - change (replace) to the end of the line
  • c$ - cambia (sostituisci) fino alla fine della linea
  • ciw - cambia (sostituisci) una parola intera
  • cw - 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 - restore (undo) last changed line
  • 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 - inner block with <> tags
  • Esc - esci dalla modalità visuale
Tip Instead of b or B one can also use ( or { respectively.

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 - change marked text to lowercase
  • U - change marked text to uppercase

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 - yank into the system clipboard register
  • "+p - paste from the system clipboard register
Tip I registri sono salvati in ~/.viminfo e saranno ricaricati al prossimo avvio di vim.
Tip Special registers:

0 - last yank
" - unnamed register, last delete or yank
% - current file name
# - alternate file name
* - clipboard contents (X11 primary)
+ - clipboard contents (X11 clipboard)
/ - last search pattern
: - last command-line
. - last inserted text
- - last small (less than a line) delete
= - expression register
_ - black hole register

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 - go to the position where Vim was previously exited
  • `" - go to the position when last editing this file
  • `. - go to the position of the last change in this file
  • `` - go to the position before the last jump
  • :ju[mps] - list of jumps
  • Ctrl + i - go to newer position in jump list
  • Ctrl + o - go to older position in jump list
  • :changes - list of changes
  • g, - go to newer position in change list
  • g; - go to older position in change list
  • Ctrl + ] - jump to the tag under cursor
Tip To jump to a mark you can either use a backtick (`) or an apostrophe ('). Using an apostrophe jumps to the beginning (first non-black) of the line holding the mark.

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
  • y$ - copia fino alla fine della linea
  • p - incolla dopo il cursore
  • P - incolla prima del cursore
  • dd - cancella (taglia) una linea
  • 2dd - cancella (taglia) due linee
  • dw - cancella (taglia) una parola
  • D - cancella (taglia) fino alla fine della linea
  • d$ - cancella (taglia) fino alla fine della linea
  • x - cancella (taglia) carattere

Indent text

  • >> - indent (move right) line one shiftwidth
  • << - de-indent (move left) line one shiftwidth
  • >% - indent a block with () or {} (cursor on brace)
  • >ib - indent inner block with ()
  • >at - indent a block with <> tags
  • 3== - re-indent 3 lines
  • =% - re-indent a block with () or {} (cursor on brace)
  • =iB - re-indent inner block with {}
  • gg=G - re-indent entire buffer
  • ]p - paste and adjust indent to current line

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] or :bn - vai al buffer successivo
  • :bp[revious] or :bp - vai al buffer precedente
  • :bd[elete] - cancella un buffer (chiudi un file)
  • :b# - go to a buffer by #
  • :b file - go to a buffer by file
  • :ls - 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] - edit all buffers as vertical windows
  • :tab ba[ll] - edit all buffers as tabs
  • Ctrl + ws - dividi finestra
  • Ctrl + wv - dividi finestra verticalmente
  • Ctrl + ww - cambia finestra
  • Ctrl + wq - esci da una finestra
  • Ctrl + wx - exchange current window with next one
  • Ctrl + w= - make all windows equal height & width
  • 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)

Diff

  • zf - manually define a fold up to motion
  • zd - delete fold under the cursor
  • za - toggle fold under the cursor
  • zo - open fold under the cursor
  • zc - close fold under the cursor
  • zr - reduce (open) all folds by one level
  • zm - fold more (close) all folds by one level
  • zi - toggle folding functionality
  • ]c - jump to start of next change
  • [c - jump to start of previous change
  • do or :diffg[et] - obtain (get) difference (from other buffer)
  • dp or :diffpu[t] - put difference (to other buffer)
  • :diffthis - make current window part of diff
  • :dif[fupdate] - update differences
  • :diffo[ff] - switch off diff mode for current window
Tip The commands for folding (e.g. za) operate on one level. To operate on all levels, use uppercase letters (e.g. zA).
Tip To view the differences of files, one can directly start Vim in diff mode by running vimdiff in a terminal. One can even set this as git difftool.