$ k - up
h - left
l - right
j - down
w - next start of word
W - next start of whitespace-delimited word
e - next end of word
E - next end of whitespace-delimited word
b - previous start of word
B - previous start of whitespace-delimited word
0 - start of line
$ - end of line
gg - go to first line in file
G - go to end of file
gk - move down one displayed line
gj - move up one displayed line
$ a - append after the cursor
A - append at the end of the line
i - insert before the cursor
I - insert at the beginning of the line
o - create a new line under the cursor
O - create a new line above the cursor
R - enter insert mode but replace instead of inserting chars
:r {file} - insert from file
$ u - undo
yy - yank (copy) a line
y{motion} - yank text that {motion} moves over
p - paste after cursor
P - paste before cursor
<Del> or x - delete a character
dd - delete a line
d{motion} - delete text that {motion} moves over
$ :s/foo/bar/ - replace the first match of 'foo' with 'bar' on the current line only
:s/foo/bar/g - replace all matches (`g` flag) of 'foo' with 'bar' on the current line only
:%s/foo/bar/g - replace all matches of 'foo' with 'bar' in the entire file (`:%s`)
:%s/foo/bar/gc - ask to manually confirm (`c` flag) each replacement
$ :e filename - edit another file
:split filename - split window and load another file
ctrl-w up arrow - move cursor up a window
ctrl-w ctrl-w - move cursor to another window (cycle)
ctrl-w_ - maximize current window
ctrl-w= - make all equal size
10 ctrl-w+ - increase window size by 10 lines
:vsplit file - vertical split
:sview file - same as split, but readonly
:hide - close current window
:only - keep only this window open
:ls - show current buffers
:b 2 - open buffer #2 in this window