Cursor movement

w jump by start of words
W jump by words (no punct.)
e jump to end of words
E jump to end of words (no punct.)
b jump backwards by words
B jump backwards by words (no punct.)
0 start of line
^ first non-blank character of line
$ end of line
G GoTo command (prefix like 5G)

Note:
Prefix a cursor movement command with a number:
for example, 4j moves down 4 lines.

Insert Mode - Inserting/Appending text

i start insert mode at cursor
I insert at the beginning of line
a append after cursor
A append at the end of line
o open (append) blank line below current one
O open blank line above current one
ea append at the end of word
Esc exit insert mode

Editing

r replace a single character
J join the line below to current one
cc change (replace) an entire line
cw change (replace) to the end of word
c$ change (replace) to the end of line
s delete character at cursor and substitute text
S delete line at cursor and substitute text
xp transpose two letters (delete+paste, technically)
u undo
ctrl+r redo
. repeat last command

Marking text (visual mode)

v start visual mode
V start Linewise vidual 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 mark () block (incl. braces)
aB mark {} block (incl. brackets)
ib inner () block
iB inner {} block
Esc exit visual mode

Visual commands

> shift right
< shift left
y yank (copy) marked text
d delete marked text
~ switch case

Cut and Paste

yy yank (copy) a line
2yy yank 2 lines
yw yank word
y$ yank to end of line
p put (paste) the clipboard after cursor
P put (paste) before cursor
dd delete (cut) a line
dw delete (cut) the current word
x delete (cut) current character

Exiting

:w write (save) the file, but don't quit
:wq write (save) and quit
:q quit (fails is anything has changed)
:q! quit and throw away changes

Search/Replace

/pattern search for pattern
?pattern search backwards for pattern
n repeat search in same direction
N repeast search in opposite direction
:%s/old/new/g replace all old with new throughout file
%s/old/new/gc ... with confirmations

Working with multiple files

:e filename edit a file in a new buffer
:bnext (or :bn) go to next buffer
:bprev (or :bp) go to previous buffer
:bd delete a buffer (close a file)
:sp filename open a filename in a new buffer and split window
ctrl+ws split windows
ctrl+ww switch between windows
ctrl+wq quit a window
ctrl+wv split windows vertically