8

For vim purposes, I'd like to remap CapsLock to CTRL when used in combination with other keys and ESC when used in isolation.

None of the existing solutions give both functionality - only one or the other.

Thanks!

adarsh
  • 305

3 Answers3

13

Step by step instructions:

  1. Install both PCKeyboardHack and KeyRemap4MacBook. It will prompt you to reboot after installing the apps.
  2. Disable Caps Lock. Go to System Preferences -> Keyboard -> Modifier Keys. Set Caps Lock to "No Action".
  3. In PCKeyboardHack set Cap Lock to Control_L by changing the Caps Lock keycode to 59.
  4. In KeyRemap4MacBook, toggle "Control_L to Control_L (+ when you type Control_L only, send Escape". I searched for "Control_L escape" and it showed up near the top.

UPDATE:

On High Sierra, this functionality is built into the new Karabiner Elements.

Follow the install instructions, then:

  1. Open Karabiner-Elements
  2. Click "Complex Modifications"
  3. Click "Add Rule"
  4. Click "Import more rules from the internet"
  5. On the resultant web page, look for "Modifier Keys > Change caps_lock Key" and import the configuration.
  6. Profit!
4

This worked for me on OSX 10.9:

  1. Set Caps Lock to Control. Go to System Preferences -> Keyboard -> Modifier Keys. Set Caps Lock to "^ Control",
  2. Install KeyRemap4MacBook,
  3. In KeyRemap4MacBook, toggle "Control_L to Control_L (+ when you type Control_L only, send Escape".
ku1ik
  • 446
0

Try out KeyRemap4Macbook, specifically the part called PCKeyboardHack. A year or so ago I was able to set it up so that holding down Caps Lock worked like Ctrl, but just tapping it brought up Exposé; so what you're asking should be possible.

Configuring KR4M, although it has a GUI, can be a little tricky because of the bewildering variety of options. I think you can probably scroll through the options and just look for ones under "PCKeyboardHack."

Note: I saw someone on IRC say they were unable to get this to work with the Mountain Lion preview; I don't have Lion yet to test out if it works there, but I don't see anything online about it not working (except for this possibly-unrelated bug).