DefaultKeyBindings.dict file (~/Library/KeyBindings/DefaultKeyBindings.dict) for Mac OS X, created by Brett Terpstra and based heavily on work done by Lri. Please note that these bindings won’t work in all applications: TextWrangler and TextMate, for example, override these with their own settings. See Lri’s gists and website for more coding madness.


Download the project zip file from GitHub. Unzip the file and copy the DefaultKeyBindings.dict file to the ~/Library/KeyBindings/ directory (create KeyBindings if it doesn’t already exist). Any open applications will need to be re-started before the key bindings will take effect – or log out and log back in.

For more information, see my blog post, check out Macworld hints, an older but very relevant article from Harvard and do a search for more information.

Documentation (last updated 05/08/2012.)

Grouped items begin with the groups shortcut (if exists), followed by a subgroup (if exists) followed by the keys specified.

General Commands
General Commands
Key Function
^y replace yank: command with yankAndSelect for use with the kill ring ( defaults write -g NSTextKillRingSize -string 6)
^⇧u uppercase word
^⌥u lowercase word
^⇧t titlecase word
^⌥⇧u uppercase current paragraph
^⌥t titlecase paragraph
^w delete word before cursor
⌥w select word
⌥⇧s select entire line/paragraph
⌥s select from beginning of paragrah to last character
^⌥⇧s select paragraph excluding leading/trailing whitespace (same as ^$@\UF701)
⌥d delete line/paragraph
⌥y copy paragraph
⌥x cut paragraph
⌥p paste paragraph below
⌥⇧p paste paragraph above
^⇧a select to beginning of paragraph and copy
^⇧e select to end of paragraph and copy
⌥q cut to beginning of paragraph
⌥k cut to end of paragraph
⌥o blank line after current
⌥⇧o blank line before current
^⌘k move line up
^⌘j move line down
^⌘l indent line
^⌘h outdent line (one tab or char)
^⌘↑ move line up ( same commands but with arrow keys)
^⌘↓ move line down
^⌘→ indent line
^⌘← outdent line (one tab or char)
^⇧⌘← Full outdent - Deletes all leading space of line/paragraph (updated) ( Control-shift-command-left arrow)
^⇧⌘→ Delete trailing space
^⌘⇧↑ Delete leading and trailing whitespace for paragraph
^⌘⇧↓ Select paragraph without leading or trailing whitespace (same as “^~s”)
⌘⌥⇧↑ modify selection up by paragraph (Command Option Shift Up)
⌘⌥⇧↓ modify selection down by paragraph (Command Option Shift Down)
^⌥⇧← modify selection left by word
^⌥⇧→ modify selection right by word
⌘⌥^← Move to first Alphanumeric character of line (new)
⌘⌥← Move to first non-whitespace character of line (new)
⌘⌥⇧← Select to first character of line with leading space (new)
⌥⌘→ Move to last non-whitespace character of paragraph (new)
^⌥→ Move to end of paragraph and delete trailing whitespace (new)
⌘↩ TextMate Command-Return (Command Enter)
⌘⇧↩ Insert blank line above paragraph (Command Shift Enter)
⌥_ hyphenate next space and move to next word ( this will kill non alphanumeric symbols and punctuation, use only on words)
⌥1 bookmark
⌥2 jump to bookmark
⌥⌘↩ Continue a list item with indentation and include the same delimiter ( Command Option Enter)
⇧⇥ remove one tab (or character) from start of line (outdent) ( Shift Tab)
⌘⌥b bold selection (Markdown)
⌘⌥i italicize selection (Markdown)
⌘⌥= increase markdown header level
⌘⌥- decrease markdown header level
^⌥↩ Add hard break for current line and insert newline below (new)
^⌘↩ Break line at cursor and add Markdown hard line break (new)
^< Make selected text into paired HTML tag. Allows attributes, only dupes first word into closing tag (caveat: overwrites your pasteboard)
⌥r repeat character before cursor
⌘⇧⌦ Forward delete to end of paragraph
⌘⇧⌫ Delete to beginning of paragraph
⌘⌥7 Right mouse click (useless, doesn’t maintain cursor position)
Commenting commands
Commenting commands (^⌘c)
^⌘c / comment with “//”
^⌘c \ comment with “#”
^⌘c ! HTML commenting
^⌘c * Css Commenting
Multi-stroke Markdown commands
Multi-stroke Markdown commands (^⌘w)
^⌘w force carriage return in text field
^⌘w force tab in text field
^⌘w \ insert reference link [selection][[cursor]]
^⌘w \ insert reference [selection]: [cursor]
^⌘w + Unordered list item with
^⌘w - Unordered list item with -
^⌘w * Unordered list item with *
^⌘w 8 convert current numbered list item to bullet, handles indentation
^⌘w 1 convert current bullet list item to numbered
Headlines (removes leading whitespace after inserting hashmarks) (h)
^⌘w h 1 #
^⌘w h 2 ##
^⌘w h 3 ###
^⌘w h 4 ####
^⌘w h 5 #####
^⌘w h 6 ######
Markdown link (l)
^⌘w l t create a link for selected text, cursor between () [selected text]([cursor]) ( links without selected text first, these can produce a mess using multiple clipboards make a text selection before you run them)
^⌘w l c create a link for selected text, inserting clipboard as url [[cursor]selected text](clipboard contents)
Link as image (i)
^⌘w i t same as lt, but with image syntax ![selected text]([cursor])
^⌘w i c same as lc, but with image syntax ![selected text](clipboard)
Reference links (:)
^⌘w : t create a reference from selected text
^⌘w : c create a reference from selected text, clipboard as url
HTML commands
HTML commands (^⌘e)
^⌘e = =“[cursor]”
^⌘e e entity &[cursor];
^⌘e / http://
^⌘e t Make previous word into paired HTML tag
HTML Links (a)
^⌘e a t Insert HTML link for selected text, leave cursor in the href with “http://” selected
^⌘e a c Insert HTML link with clipboard as href
HTML Image (i)
^⌘e i t Insert image tag, any selected text is alt text, leave cursor in src attribute
^⌘e i c Insert image tag, clipboard as src, any selected text as alt, leave cursor at beginning of alt attribute
Surround commands
Surround commands (^⌘s)
^⌘s ( wrap () with spaces
^⌘s ) wrap () no spaces
^⌘s [ wrap [] with spaces
^⌘s ] wrap [] no spaces
^⌘s { wrap {} with spaces
^⌘s } wrap {} no spaces
^⌘s < wrap <> with spaces
^⌘s > wrap <> no spaces
^⌘s wrap single quotes
^⌘s ` wrap backticks

This documentation is generated automatically from the comments and commands in the DefaultKeyBinding.dict file. The script document_keybindings.rb is free for use, but it’s specifically designed for use with my formatting in the bindings plist (i.e. it’s a little finicky).

Speaking of KeyBindings…

Related Projects