πŸ“‹ Cheat Sheets
Β· 6 min read

Vim Cheat Sheet β€” Survive and Thrive in Vim


Some links in this article are affiliate links. We earn a commission at no extra cost to you when you purchase through them. Full disclosure.

Click any command to expand the explanation.

Not sure if Vim is right for you? See Vim vs VS Code. For general terminal skills, check our Linux terminal cheat sheet.

πŸšͺ Getting Out (The Most Googled Question)

:q β€” quit exit
:q        # Quit (fails if unsaved changes)
:q!       # Quit without saving (force)
:wq       # Save and quit
:x        # Save and quit (same as :wq)
ZZ        # Save and quit (no colon needed)
ZQ        # Quit without saving (no colon needed)
If you're stuck, press Esc first, then type :q! and hit Enter.

🎯 Modes

Normal β†’ Insert β†’ Visual modes
Vim has different modes. You start in Normal mode.
# Enter Insert mode (type text)
i     # Insert before cursor
a     # Insert after cursor
I     # Insert at beginning of line
A     # Insert at end of line
o     # New line below
O     # New line above

Back to Normal mode

Esc # or Ctrl+[

Enter Visual mode (select text)

v # Character-wise selection V # Line-wise selection Ctrl+v # Block (column) selection

Enter Command mode

: # Type a command at the bottom

🧭 Movement

Basic movement move
h     # Left
j     # Down
k     # Up
l     # Right

By word

w # Next word start b # Previous word start e # Next word end W/B/E # Same but WORD (whitespace-separated)

By line

0 # Beginning of line ^ # First non-blank character $ # End of line

Jumping around move
gg    # Go to first line
G     # Go to last line
5G    # Go to line 5
:42   # Go to line 42

{ # Previous blank line (paragraph up) } # Next blank line (paragraph down)

Ctrl+d # Half page down Ctrl+u # Half page up Ctrl+f # Full page down Ctrl+b # Full page up

% # Jump to matching bracket ( ) [ ] { }

Search movement move
f{char}   # Jump to next {char} on this line
F{char}   # Jump to previous {char}
t{char}   # Jump to just before next {char}
;         # Repeat last f/F/t
,         # Repeat last f/F/t (reverse)
  •     # Search for word under cursor (forward)

# Search for word under cursor (backward)

✏️ Editing

Delete / change / yank edit
These follow the pattern: operator + motion.
# Delete
x       # Delete character under cursor
dd      # Delete entire line
dw      # Delete to next word
d$      # Delete to end of line
D       # Same as d$
d3j     # Delete 3 lines down

Change (delete + enter insert mode)

cc # Change entire line cw # Change word c$ # Change to end of line C # Same as c$ ci” # Change inside quotes ci( # Change inside parentheses

Yank (copy)

yy # Yank entire line yw # Yank word y$ # Yank to end of line

Paste

p # Paste after cursor P # Paste before cursor

Text objects β€” the Vim superpower edit
i = inside, a = around (includes delimiters). Combine with d/c/y.
ci"     # Change inside "quotes"
ca"     # Change around "quotes" (includes the quotes)
di(     # Delete inside (parentheses)
da{     # Delete around {braces}
ci[     # Change inside [brackets]
dit     # Delete inside HTML tag
cit     # Change inside HTML tag
ciw     # Change inner word
daw     # Delete a word (includes trailing space)
dip     # Delete inner paragraph
yap     # Yank a paragraph
This is what makes Vim fast. ci" to change the contents of a string is incredibly useful.
Undo / redo edit
u       # Undo
Ctrl+r  # Redo
.       # Repeat last change (the dot command)
The dot command is one of Vim's best features. Make a change, then press . to repeat it.
Indent / format edit
>>      # Indent line right
<<      # Indent line left
3>>     # Indent 3 lines
=       # Auto-indent (use with motion)
gg=G    # Auto-indent entire file

In visual mode

  # Indent selection

< # Unindent selection

πŸ” Search & Replace

/pattern β€” search search
/text     # Search forward
?text     # Search backward
n         # Next match
N         # Previous match

Case insensitive

/text\c

Regex

/\d+ # One or more digits /^func # Lines starting with β€œfunc”

Clear search highlighting

:noh

:%s/old/new/g β€” search & replace search
# Replace all in file
:%s/old/new/g

Replace with confirmation

:%s/old/new/gc

Replace in current line only

:s/old/new/g

Replace in lines 5-10

:5,10s/old/new/g

Replace in visual selection

(select with V, then type :)

:’<,β€˜>s/old/new/g

Case insensitive

:%s/old/new/gi

Use regex

:%s/\d+/NUMBER/g

πŸ“‘ Windows & Tabs

Split windows windows
:split file    # Horizontal split
:vsplit file   # Vertical split
Ctrl+w s       # Split current file horizontally
Ctrl+w v       # Split current file vertically

Navigate between splits

Ctrl+w h/j/k/l # Move to left/down/up/right split Ctrl+w w # Cycle through splits

Resize

Ctrl+w = # Equal size Ctrl+w + # Taller Ctrl+w - # Shorter

Close

Ctrl+w q # Close current split

Tabs & buffers windows
# Tabs
:tabnew file   # Open file in new tab
gt             # Next tab
gT             # Previous tab
:tabclose      # Close tab

Buffers

:e file # Open file in current buffer :ls # List open buffers :bn # Next buffer :bp # Previous buffer :bd # Close buffer

⚑ Power Moves

Macros advanced
Record a sequence of commands and replay it.
qa      # Start recording into register 'a'
...     # Do your edits
q       # Stop recording
@a      # Play macro 'a'
@@      # Repeat last macro
10@a    # Play macro 'a' 10 times
Example: Record qa0f"ci"replacement<Esc>jq to change the first quoted string on each line, then 10@a to repeat 10 times.
Marks advanced
Bookmark positions in a file.
ma      # Set mark 'a' at cursor position
'a      # Jump to line of mark 'a'
`a      # Jump to exact position of mark 'a'
:marks  # List all marks
Lowercase marks are per-file. Uppercase marks are global (across files).
Useful commands advanced
:!command    # Run shell command
:r !command  # Insert command output into file
:r file      # Insert file contents
:w !sudo tee %  # Save file you opened without sudo
J            # Join current line with next
~            # Toggle case of character
gU{motion}   # Uppercase
gu{motion}   # Lowercase
Ctrl+a       # Increment number under cursor
Ctrl+x       # Decrement number under cursor

Quick access: Raycast lets you search commands, snippets, and cheat sheets instantly from your keyboard. Free for Mac.

Related:* Vim vs. VS Code β€” Which Editor Should You Use?