Key Bindings

Kimo Johnson

03 May 2006

A feature I love about Mac OS X is the fact that key bindings are consistent across applications. Once your fingers learn apple-s for save, apple-q for quit, etc., you become much faster. The default cursor movement keystokes, however, are awkward: apple-rightarrow jumps to the end of the line, apple-leftarrow jumps to the beginning of the line, option-rightarrow and option-leftarrow skip by word. I don't like the fact that I have to move my right hand out of home position to use them. Users of UNIX systems are familiar with another convention, emacs-style key bindings, and these can be easily enabled on Mac OS X.

The secret is a file called DefaultKeyBinding.dict in ~/Library/KeyBindings. By default, neither the file nor the directory will exist. You need to create the file, put it in ~/Library/KeyBindings, and reboot (or logout). Here is my DefaultKeyBinding.dict file:

/* ~/Library/KeyBindings/DefaultKeyBinding.dict */
{
    "~f" = "moveWordForward:";
    "~b" = "moveWordBackward:";
    "~<" = "moveToBeginningOfDocument:";
    "~>" = "moveToEndOfDocument:";
    "~v" = "pageUp:";
    "~d" = "deleteWordForward:";
    "~^h" = "deleteWordBackward:";
    "~\010" = "deleteWordBackward:";    /* option-backspace */
    "~\177" = "deleteWordBackward:";    /* option-delete */
    "^e" = "moveToEndOfLine:";
    "^a" = "moveToBeginningOfLine:";
    "^u" = "deleteToBeginningOfLine:";    

    "\033" = "complete:";  /* Escape */
}

Now you have the following KeyBindings (and others):

ctrl-a jump to beginning of line
ctrl-e jump to end of line
option-f skip forward by word
option-b skip backward by word
ctrl-u delete to beginning of line
option- delete delete backward by word

These key bindings work in all Cocoa applications that use the standard text editing tools. For example, here’s something I do all the time:

  • Drag a folder from Finder to Terminal
  • type ctrl-a to skip to the beginning of the line
  • type cd and press enter