Powerful, efficient, and highly configurable---that’s Vim in a nutshell for you. This cross-platform command line text editor has been around for ages and has a solid online community you can look to for help. The best part is that Vim is free and open source.

If you have only dabbled in Vim until now, the next step is getting comfortable with Vim commands i.e. Vim’s keyboard shortcuts. (This is essential given that Vim is a keyboard-centric text editor.)

We’ve even compiled the best Vim shortcuts into a cheat sheet for you! Scroll down to discover it. You can also download a PDF version of this Vim cheat sheet and save it to your desktop for quick access.

Keep in mind that Vim (Vi Improved) is a modified clone of the Unix-based text editor Vi, which ships with several Linux distros. So you’ll find that several Vim commands also function as Vi commands.

FREE DOWNLOAD: This cheat sheet is available as a downloadable PDF from our distribution partner, TradePub. You will have to complete a short form to access it for the first time only. Download The Vim Cheat Sheet.

The Vim Commands Cheat Sheet

Shortcut

Action

Cursor Movement

h

Move cursor left

j

Move cursor down

k

Move cursor up

l

Move cursor right

w OR ¹W

Move cursor to the start of the next word

b OR ¹B

Move cursor to the start of the previous word

e OR ¹E

Move forward to the end of a word

0

Move to the start of the line

^

Move to the first non-blank character of the line

$

Move to the end of the line

G

Go to the last line of the document

nG OR :n

Go to line number n

'

To the position before the latest jump, / where the last "m'" / "m`" command was given.

fx

Move to next occurrence of character x

tx

Move to one character before the character x

}

Move to next paragraph

{

Move to previous paragraph

H

Move to home (top) of screen

L

Move to last line of screen

M

Move to middle of screen

3, f, x

Move to 3rd instance of character x forward from cursor on current line.

3, F, x

Move to 3rd instance of character x back from cursor on current line.

Editing a File

r

Replace a single character

dd

Cut (delete) a line

yy

Yank (copy) a line

2yy

Yank (copy) two lines

J

Join line below to the current one

cc OR S

Change (replace) entire line

cw

Change (replace) to the end of the word

c$

Change (replace) to the end of the line

s

Delete character and substitute text

xp

Transpose two letters (delete and paste)

u

Undo

Ctrl r

Redo

.

Repeat last command

Search and Replace

*

Search for word under cursor

/pattern

Search for pattern

?pattern

Search backward for pattern

n

Repeat search in same direction

N

Repeat search in opposite direction

:%s/old/new/g

Replace all instances of old with new

:%s/old/new/gc

Replace all instances of old with new, with confirmations

Screen Movement

Ctrl u

Move screen up by half page

Ctrl b

Move screen up by one page

Ctrl d

Move screen down by half page

Ctrl f

Move screen down by one page

zz

Center screen on cursor

zt

Align top of screen with cursor

zb

Align bottom of screen with cursor

Insert Mode (Insert Text)

i

Enter insert mode

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

Esc

Exit insert mode

Change Case

~

Toggle case (Case => cASE)

gU

Uppercase

gu

Lowercase

gUU

Uppercase current line (also gUgU)

guu

Lowercase current line (also gugu)

Visual Mode (Mark Text)

v

Start visual mode, mark lines, then do a command (like y-yank)

V

Start linewise visual mode

vo

Move to other end of marked area

Ctrl v

Start visual block mode

vO

Move to other corner of block

vaw

Mark a word

vab

Mark a block with ()

vaB

Mark a block with {}

vib

Mark inner block with ()

viB

Mark inner block with {}

Esc

Exit visual mode

Visual Commands

>

Shift text right

<

Shift text left

#ERROR!

Auto-indent current line

<<

Shift current line left by shiftwidth

>>

Shift current line right by shiftwidth

y

Yank (copy) marked text

d

Delete marked text

~

Switch case

Folding Commands

zf#j

Create a fold from the cursor down # lines

zf/

String creates a fold from the cursor to string

zj

Move the cursor to the next fold

zk

Move the cursor to the previous fold

za

Toggle a fold under cursor

zo

Open a fold at the cursor

zO

Open all folds at the cursor

zc

Close a fold under cursor

zm

Increase the foldlevel by one

zM

Close all open folds

zr

Decrease the foldlevel by one

zR

Decrease the foldlevel to zero—all folds will be open

zd

Delete the fold at the cursor

zE

Delete all folds

[z

Move to start of open fold

]z

Move to end of open fold

Tabs

#gt

Move to tab number #

Ctrl w, t

Move the current split window into its own tab

:tabmove #

Move current tab to the #th position (indexed from 0)

:tabnew filename/ :tabn filename

Open a file in a new tab

:tabclose / :tabc

Close the current tab and all its windows

:tabonly / :tabo

Close all tabs except the current one

gt / :tabnext / :tabn

Move to the next tab

gT / :tabprev / :tabp

Move to the previous tab

Working With Multiple Files

:e filename

Edit a file in a new buffer

:ene

Open a blank file for editing

:bnext / :bn

Go to the next buffer

:bprev / :bp

Go to the previous buffer

:bd

Delete a buffer (close a file)

:sp filename

Open a file in a new buffer and split window

:vs filename

Open a file in a new buffer and vertically split window

Ctrl w, s

Split window

Ctrl w, w

Switch windows

Ctrl w, q

Quit a window

Ctrl w, v

Split window vertically

Ctrl w, h

Move cursor to window left

Ctrl w, l

Move cursor to window right

Ctrl w, k

Move cursor to window above

Ctrl w, j

Move cursor to window below

Ctrl w, r

Rotate windows clockwise

Ctrl w, T

Move current window to a new tab

:on

Close all windows except current window

Ctrl w, |

Maximize width of active window

Ctrl w, 1, |

Minimize width of active window

Ctrl w, _

Maximize height of active window

Ctrl w, 1, _

Minimize height of active window

Ctrl w, =

Equalize the size of windows

Exiting a File

:w

Write (save) the file, but don't exit

:wq

Write (save) and quit

:x OR ZZ

Write (save) current file if modified and quit

:q

Quit (fails if there are unsaved changes)

:q!

Quit and discard unsaved changes

:qa

Quit all buffers and windows

ZQ

Quit without checking for changes

¹Word can contain punctuation.

Vim Improved

Vim is no doubt a great text editor, but it could do with a few of the useful features that most modern text editors are equipped with. The good news is that you can add top features from other text editors to Vim!

Image Credit: Markus Spiske on Unsplash