7 minutes
Vim Cheat Sheet
Global
:h keyword
- open help for keyword
:ter
- open terminal
Cursor movement
h
- move cursor left
j
- move cursor down
k
- move cursor up
l
- move cursor right
H
- move to top of screen
M
- move to middle of screen
L
- move to bottom of screen
w
- jump forwards to the start of a word
W
- jump forwards to the start of a word (words can contain punctuation)
e
- jump forwards to the end of a word
E
- jump forwards to the end of a word (words can contain punctuation)
b
- jump backwards to the start of a word
B
- jump backwards to the start of a word (words can contain punctuation)
%
- move to matching character (default supported pairs: ‘()', ‘{}', ‘[]’ - use :h matchpairs in vim for more info)
0
- jump to the start of the line
^
- jump to the first non-blank character of the line
$
- jump to the end of the line
g_
- jump to the last non-blank character of the line
gg
- go to the first line of the document
G
- go to the last line of the document
5gg
or 5G - go to line 5
gd
- move to local declaration
gD
- move to global declaration
fx
- jump to next occurrence of character x
tx
- jump to before next occurrence of character x
Fx
- jump to previous occurence of character x
Tx
- jump to after previous occurence of character x
;
- repeat previous f, t, F or T movement
,
- repeat previous f, t, F or T movement, backwards
}
- jump to next paragraph (or function/block, when editing code)
{
- jump to previous paragraph (or function/block, when editing code)
zz
- center cursor on screen
Ctrl + e
- move screen down one line (without moving cursor)
Ctrl + y
- move screen up one line (without moving cursor)
Ctrl + b
- move back one full screen
Ctrl + f
- move forward one full screen
Ctrl + d
- move forward 1/2 a screen
Ctrl + u
- move back 1/2 a screen
Cut / Paste
yy
- yank (copy) a line
2yy
- yank (copy) 2 lines
yw
- yank (copy) the characters of the word from the cursor position to the start of the next word
y$
- yank (copy) to end of line
p
- put (paste) the clipboard after cursor
P
- put (paste) before cursor
dd
- delete (cut) a line
2dd
- delete (cut) 2 lines
dw
- delete (cut) the characters of the word from the cursor position to the start of the next word
D
- delete (cut) to the end of the line
d$
- delete (cut) to the end of the line
x
- delete (cut) character
<leader> y
- copy to system clipboard
<leader> p
- paste from system clipboard
<leader> Y
- copy to pastebin
Editing
r
- replace a single character
J
- join line below to the current one with one space in between
gJ
- join line below to the current one without space in between
gwip
- reflow paragraph
g~
- switch case up to motion
gu
- change to lowercase up to motion
gU
- change to uppercase up to motion
cc
- change (replace) entire line
C
- change (replace) to the end of the line
c$
- change (replace) to the end of the line
ciw
- change (replace) entire word
cw
- change (replace) to the end of the word
s
- delete character and substitute text
S
- delete line and substitute text (same as cc)
xp
- transpose two letters (delete and paste)
u
- undo
U
- restore (undo) last changed line
Ctrl + r
- redo
.
- repeat last command
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
Insert mode
i
- insert before the cursor
I
- insert at the beginning of the line
a
- insert (append) after the cursor
A
- insert (append) at the end of the line
o
- append (open) a new line below the current line
O
- append (open) a new line above the current line
ea
- insert (append) at the end of the word
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
Ctrl + rx
- insert the contents of register x
Esc
- exit insert mode
Macros
qa
- record macro a
q
- stop recording macro
@a
- run macro a
@@
- rerun last run macro
Marks / Positions
:marks
- list of marks
ma
- set current position for mark A
`a
- jump to position of mark A
y`a
- yank text to position of mark A
`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
Registers
:reg[isters]
- show registers content
"xy
- yank into register x
"xp
- paste contents of register x
"+y
- yank into the system clipboard register
"+p
- paste from the system clipboard register
Search and replace
/pattern
- search for pattern
?pattern
- search backward for pattern
\vpattern
- ‘very magic’ pattern: non-alphanumeric characters are interpreted as special regex symbols (no escaping needed)
n
- repeat search in same direction
N
- repeat search in opposite direction
:%s/old/new/g
- replace all old with new throughout file
:%s/old/new/gc
- replace all old with new throughout file with confirmations
:noh[lsearch]
- remove highlighting of search matches
Visual mode
v
- start visual mode, mark lines, then do a command (like y-yank)
V
- start linewise visual mode
o
- move to other end of marked area
Ctrl + v
- start visual block mode
O
- move to other corner of block
aw
- mark a word
ab
- a block with ()
aB
- a block with {}
at
- a block with <> tags
ib
- inner block with ()
iB
- inner block with {}
it
- inner block with <> tags
Esc
- exit visual mode
>
- shift text right
<
- shift text left
y
- yank (copy) marked text
d
- delete marked text
~
- switch case
u
- change marked text to lowercase
U
- change marked text to uppercase