Here is why vim uses the hjkl keys as arrow keys
Doesn't this go way back though?<p>The reason that keyboard had those arrows keys on it was because those keys correspond to CTRL-H, J, K, L and the CTRL key back then worked by killing bit 6 (and bit 5) of the characters being typed.<p>The effect was that H which is ASCII 0x48 would become 0x08 which is backspace.  If you look at an ASCII table (e.g. <a href="http://www.asciitable.com/" rel="nofollow">http://www.asciitable.com/</a>) you will notice how the uppercase ASCII letters line up nicely with the control characters so that just dropping bit 6 will get you there.  Same thing with the lowercase (drop bits 5 and 6) and you are on the control characters.<p>The CTRL-H, J, K, L therefore correspond to BS, LF, VT, FF.  BS is backspace (i.e. left), LF (down), VT is vertical tab (so up) and FF is form feed (which in this case takes you up).  I'm not sure why FF was used for up.<p>This is also why CTRL-I is tab, CTRL-D ends a communication.  All of that goes back to teletype days.  Also for telnet users out there you'll see that CTRL-[ lines up nicely with ESC.  And when you see a ^@ being printed on the terminal you can see why it corresponds to a null byte.<p>One other interesting thing about ASCII: uppercasing and downcasing can be done by twiddling a single bit.<p>If you look at this picture of an ASR-33 Teletype you'll see that come of the control characters on the keyboard correspond to those in the ASCII set.  This is because ASCII evolved from the earlier teletype character sets: <a href="http://upload.wikimedia.org/wikipedia/commons/0/0b/ASR-33_2.jpg" rel="nofollow">http://upload.wikimedia.org/wikipedia/commons/0/0b/ASR-33_2....</a>