A good[ish] website
Web development blog, loads of UI and JavaScript topics
Here’s a comprehensive Vim command cheat cheat.
| h | move cursor left | 
| j | move cursor down | 
| k | move cursor up | 
| l | move cursor right | 
| w | jump forwards to the start of a word | 
| W | jump forwards to the start of a word (words can contain punctuation) | 
| e | jump forwards to the end of a word | 
| E | jump forwards to the end of a word (words can contain punctuation) | 
| b | jump backwards to the start of a word | 
| B | jump backwards to the start of a word (words can contain punctuation) | 
| 0 | jump to the start of the line | 
| ^ | jump to the first non-blank character of the line | 
| $ | jump to the end of the line | 
| G | go to the last line of the document | 
| 5G | go to line 5 | 
| i | insert before the cursor | 
| 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 | 
| r | replace a single character | 
| J | join line below to the current one | 
| cc | 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 | 
| S | delete line and substitute text (same as cc) | 
| xp | transpose two letters (delete and paste) | 
| u | undo | 
| Ctrl+r | redo | 
| . | repeat last command | 
| v | start visual mode, mark lines, then do a command (like y-yank) | 
| V | start linewise visual 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 | a block with () | 
| aB | a block with | 
| ib | inner block with () | 
| iB | inner block with | 
| Esc | exit visual mode | 
| > | shift text right | 
| < | shift text left | 
| y | yank (copy) marked text | 
| d | delete marked text | 
| ~ | switch case | 
| yy | yank (copy) a line | 
| 2yy | yank (copy) 2 lines | 
| yw | yank (copy) word | 
| y$ | yank (copy) to end of line | 
| p | put (paste) the clipboard after cursor | 
| P | put (paste) before cursor | 
| dd | delete (cut) a line | 
| 2dd | delete (cut) 2 lines | 
| dw | delete (cut) word | 
| D | delete (cut) to the end of the line | 
| d$ | delete (cut) to the end of the line | 
| x | delete (cut) character | 
| :w | write (save) the file, but don't exit | 
| :wq | write (save) and quit | 
| :x | write (save) and quit | 
| :q | quit (fails if there are unsaved changes) | 
| :q! | quit and throw away unsaved changes | 
| /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 old with new throughout file | 
| :%s/old/new/gc | replace all old with new throughout file with confirmations | 
| :e filename | edit a file in a new buffer | 
| :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 | 
| :vsp filename | open a file in a new buffer and vertically split window | 
| Ctrl+ws | split window | 
| Ctrl+ww | switch windows | 
| Ctrl+wq | quit a window | 
| Ctrl+wv | split window vertically | 
| Ctrl+wh | move cursor to next buffer (right) | 
| Ctrl+wl | move cursor to previous buffer (left) | 
| :tabnew filename:tabn filename | open a file in a new tab | 
| Ctrl+wt | move the current split window into its own tab | 
| gt:tabnext:tabn | move to the next tab | 
| gT:tabprev:tabp | move to the previous tab | 
| #gt | move to tab number # | 
| :tabmove # | move current tab to the #th position (indexed from 0) | 
| :tabclose:tabc | close the current tab and all its windows | 
| :tabonly:tabo | close all tabs except for the current one | 
Comments would go here, but the commenting system isn’t ready yet, sorry.