I'm using an U.S keyboard layout and need the ability to write ÅÄÖ sometimes(I'm from Sweden). I've customized my keyboard layout to switch three keys when caps lock is pressed.
And, if you remap Caps Lock to Ctrl, Ctrl-C will be easier to type.
This works 99% of the time. The only exception I know of where it performs differently is in operations on a visual block (not visual line) selection -- hitting Ctrl-C only applies changes to the current line but Esc does what you want.
vs
10ix<CTRL-C>
^C cancels the current command, where ESC exits insert mode.
For those that still want arrow keys in insert mode (sacrilege! ... but I do), this is probably the .vimrc option you want:
set timeout timeoutlen=1000 ttimeoutlen=100The leads back to the very old days of serial terminals and the horrible ^[ prefix in many terminal's function and arrow keys. I remember fondly working with Wyse60's and some other terminals that used ^A instead.
Imagine trying to detect ^[{randomDelay}O{randomDelay}C -vs- the user typing ^[{randomDelay}O
The Wyse60 used left=^H, right=^L, up=^K, down=^J so there was no need for the delay to detect the sequence.
Back in the old days Vi would detect this lack of multi-character function keys and not use a delay.
On a 1200 baud modem it was very nice however later as DEC and ANSI multi-byte sequences became more popular this became much more painful.
See: http://en.wikipedia.org/wiki/Termcap for more terminal insanity fun.
On a fun note, I have a customer with a 1987's era copy of Microsoft Excel for Xenix (yes it really existed).
Each time we upgraded their system to a more powerful cpu I had to patch the binary as it literally used a spin loop to delay long enough to detect the keys (never mind tty settings can help with that at kernel level). The last time I had to make it work on a recent core I literally set the "spin loop counter" in the millions to get it to work via telnet on a local network where they keys come fast and low latency!
It took me a couple hours the first time with a debugger to find this little gem, so I have a README in the binary's lib dir that explains how to update it. Every couple of years I have to dig in and figure out the right value! Fun!
EDIT: It's possible the magic was actually happening in termcap with the original vi. I didn't dig into the source to verify. :)