KeyBindings

DefaultKeyBinding.dict file (~/Library/KeyBindings/DefaultKeyBinding.dict) for Mac OS X, created by Brett Terpstra and based heavily on work done by Lauri Ranta. Please note that these bindings won’t work in all applications: TextWrangler and TextMate, for example, override these with their own settings.

Installation

Copy the DefaultKeyBinding.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.

The repository includes a script to generate a Dash docset from your customized version of the file. See here for details.

Documentation

(last updated 12/22/2023.)

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

General Commands
Key Function
⌃y Replace yank: command with yankAndSelect for use with the kill ring (defaults write -g NSTextKillRingSize -int 6)
⌃⌥y Regular yank, only insert last register and don’t select
⌃⇧u Uppercase word
⌃⌥u Lowercase word
⌃⌥t Titlecase word
⌃⌥⇧u Uppercase current paragraph
⌃⌥⇧t Titlecase paragraph
⌃w Delete word before cursor
⌥w Select word
⌥⇧w Select word backward and modify selection
⌥⇧s Select entire line/paragraph
⌥s Select from beginning of paragraph to last character
⌃⌥⇧s Select paragraph excluding leading/trailing whitespace (same as ^$@\UF701)
⌥d Delete line/paragraph
⌃u Delete to beginning of paragraph (if this isn’t already defined?)
⌥y Copy paragraph
⌥x Cut paragraph
⌥p Paste paragraph below
⌃⌥p Yank (from kill ring) paragraph below
⌥⇧p Paste paragraph above
⌃⌥⇧p Yank (from kill ring) 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 (Control-shift-command-right arrow)
⌃⌘⇧↑ Delete leading and trailing whitespace for paragraph (Control-shift-command-up arrow)
⌃⌘⇧↓ Select paragraph without leading or trailing whitespace (Control-shift-command-down arrow)
⌃⌥⇧↑ Modify selection up by paragraph (Control Option Shift Up) (Control-option-shift-up arrow)
⌃⌥⇧↓ Modify selection down by paragraph (Control Option Shift Down) (Control-option-shift-down arrow)
⌃⌥⇧← Modify selection left by word (Control-option-shift-left arrow)
⌃⌥⇧→ Modify selection right by word (Control-option-shift-right arrow)
⌘⌥⌃← Move to first Alphanumeric character of line (Control-option-up arrow Control-option-command-left arrow)
⌘⌥← Move to first non-whitespace character of line (Control-options-left arrow)
⌘⌥⇧← Select to first word of paragraph modifying selection (Options-shift-command-left arrow)
⌘⌥⇧→ Select to end of paragraph modifying selection (Option-shift-command-right arrow)
⌥⌘→ Move to last non-whitespace character of paragraph (Option-command-right arrow)
⌃⌥→ Move to end of paragraph and delete trailing whitespace (Control-option-right arrow)
⌘↩ TextMate Command-Return (Command Return)
⌘⇧↩ Insert blank line above paragraph (Command Shift Return)
⇧⌥␣ Insert space and uppercase next character (Shift-Option-Space)
⌃⇧␣ Uppercase next character (Control-Shift-Space)
⌃⌥␣ Move cursor forward with spacebar (shift-space)
⌘⌥_ 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 Return)
⇧⇥ Remove one tab (or character) from start of line (outdent) (Shift Tab)
⌘⌥b Bold selection (Markdown)
⌘⌥i Italicize selection (Markdown)
⌘⌥` Backtick selection (Markdown)
⌃⌘↩ Break line with double space (Markdown) (Control-Command-Return)
⌘⌥= Increase markdown header level
⌘⌥- Decrease markdown header level
⌘⌥> Increase blockquote header level
⌘⌥< Decrease blockquote level
⌃< 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 (Command-shift-delete)
⌘⌥7 Right mouse click (useless, doesn’t maintain cursor position)
⌘⌥⇧s Real, honest-to-goodnes Save As…
Multi–stroke casing commands (⌃⌥c)
⌃⌥c c Snake_case to camelCase (delete forward and capitalize)
⌃⌥c s Snake_case word break
Commenting commands (⌃⌘c)
⌃⌘c / Comment with “//”
⌃⌘c   Comment with “#”
⌃⌘c ! HTML commenting
⌃⌘c * Css Commenting
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 ` Fence code (new) (Requires text selection)
⌃⌘w f Insert inline footnote marker or inline footnote (new)
⌃⌘w + Unordered list item with +
⌃⌘w - Unordered list item with -
⌃⌘w * Unordered list item with *
⌃⌘w . Numeric list item (new)
⌃⌘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)
⌃⌘w s SearchLink Basic Link
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)
⌃⌘w i d Same as lc, but with image syntax and “+” for Droplr links ![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 (⌃⌘e)
⌃⌘e = =“[cursor]”
⌃⌘e e Entity &[cursor];
⌃⌘e / Https://
⌃⌘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 “https://” 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 (⌃⌘s)
⌃⌘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 <> with spaces
⌃⌘s ' Wrap single quotes
⌃⌘s ` Wrap backticks
Jekyll Shortcuts (⌃⌘j)
⌃⌘j p Pullquote Liquid Tag (new)
⌃⌘j r Raw Liquid Tag (new)
⌃⌘j ⇧r Raw Tag for entire paragraph (new)
TaskPaper Tags (⌃⌘t)
⌃⌘t d @done (new)
⌃⌘t p // @priority() (new)
⌃⌘t n @na (new)
⌃⌘t t @today (new)
SearchLink commands (⌃⌘g)
⌃⌘g g SearchLink Syntax: Google (new)
⌃⌘g ⇧a SearchLink Syntax: Amazon (new)
Apple (a)
⌃⌘g a i SearchLink Syntax: iOS App (new)
⌃⌘g a m SearchLink Syntax: Mac App Store (new)
⌃⌘g s SearchLink Syntax: Software (new)
⌃⌘g m SearchLink Syntax: IMDB (new)
⌃⌘g b SearchLink Syntax: BrettTerpstra.com (new)
⌃⌘g p SearchLink Syntax: BrettTerpstra.com Projects (new)
⌃⌘g t SearchLink Syntax: Twitter User (new)

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).

If you use Dash, you may be interested in the script for Cheatset that can create a custom Dash cheat sheet from your keybindings file, assuming proper comment formatting.

Speaking of KeyBindings…

Related Projects