Using Vi

Navigating

h   # move left
l   # move right
k   # move up
j   # move down
w   # move to the next word
W   # move to next blank delimeted word
b   # move to the begining of the word
B   # move to the beginning of blank delimted word
e   # move to the end of the word
E   # move to the end of Blank delimited word
(   # move sentence back
)   # move sentence forward
{   # move paragraph back
}   # move paragraph forward
0   # move to the begining of the line
$   # move to the end of the line
gg  # move to the begining of the file
G   # move to the end of the file
nG  # move to nth line
:n  # move to nth line
fk  # move forward to letter k within current line
Fk  # move back to letter k within current line
H   # move to the top of the screen
M   # move to the middle of the screen
L   # move to the bottom of the screen

Inserting

i   # insert before cursor
I   # insert before line
a   # append after cursor
A   # append after line
cw  # change word
C   # change to the end of line
cc  # change whole line
o   # make a new line after current line
O   # make a new line before current line
r   # replace one character
R   # replace many characters

Copy, cut and paste

y   # copy selected text
yy  # copy current line
:y  # copy current line
d   # cut selection
dd  # cut current line
p   # paste after cursor or after line
P   # paste before cursor or before line

Deleting

x   # Delete character to the right of cursor
X   # delete character to the left of cursor
D   # delete line contents
dd  # delete current line
:d  # delete current line

Searching

:/search_string  # search forward for string
:?search_string  # search back for string
n   # jump to next search result
N   # jump to previous search result

Replacing

:s/pattern/string/flags   # (flag g - replace all, flag c - confirm replaces)
&   # repeat last replace command

Exiting

:x  # exit saving changes
ZZ  # exit saving changes
:q  # exit if no changes were made
:q! # exit ignoring changes

Misc

~   # CAPS on on / off
J   # join lines
.   # execute last text changing command
u   # unco last command
U   # undo all changes to line

Files

:w file    # write file
:r file    # read file after line
:n         # go to next line
:p         # go to previous line
:e file    # edit file
!!program  # replace line with the output of program

Buffers

"adw # cut word to buffer a
"qdw # cut word info buffer q
"fdd # cut current line into buffer f
"ap  # paste from buffer a
"qp  # paste from buffer q
"fp  # paste from buffer f

Markers

mt  # set marker t for this line
mg  # set marker g for this line
`t  # go to the begining of marker t line
`g  # go to the begining of marker g line
't  # go to first non blank character of marker t line
'g  # go to first non blank character of marker g line

Ranges

:n,m # lines from n to m
:.  # range - current line
:$  # range - last line
:'c # range - marker c
:%  # range - all lines in file
:g/pattern/  # range - all lines that contain pattern