How to Change macOS Keybinding

By Xah Lee. Date: . Last updated: .

MacOS has a system-wide mechanism to let you define or modify the shortcut keys for text editing operations.

It lets you create keys to:

Mac keyboard viewer us int 2017  41373
Mac keyboard viewer. Hold option down to type unicode symbols. You can define your own symbols.

[see Mac Keyboard Viewer and Unicode]

Key Config File

Create a file at

~/Library/KeyBindings/DefaultKeyBinding.dict

Create the β€œKeyBindings” folder if you don't already have it.

Copy and past the following:

{
/* insert Unicode character with Option key down*/
"~;" = ("insertText:", "\U2665"); /* heart */

/* move cursor with i j k l keys while Ctrl key down */
"^i" = ("moveUp:");
"^k" = ("moveDown:");
"^j" = ("moveLeft:");
"^l" = ("moveRight:");
}

Restart a application and the new keybinding will take effect in that application.

Launch TextEdit to test your changes.

Note: Only applications that uses Cocoa Text System will support this.

Note: if you use Unicode Characters directly in the file such as β™₯, you must save the file using UTF-8 encoding.

The syntax in general is this:

/* this is comment */
{
"keycode1" = actionCode1;
"keycode2" = actionCode2;
}

Key Syntax

Mac OS X Keybinding Key Syntax

Action Code

Mac OS X Keybinding Action Code

Unicode Reference

If you want to create lots keys to insert math symbols or emoji, see

Unicode Search πŸ˜„

Sample File

Example of defining the {Home, End} keys to move to the beginning/end of line.

/* make home/end key to move to begin/end of line */

{
"\UF729" = "moveToBeginningOfLine:"; /* home key */
"\UF72B" = "moveToEndOfLine:"; /* end key */
}

Here's example file for inserting Unicode characters with the option key.

/* -*- coding: utf-8 -*- */
{

/* insert Unicode characteres with Option key down */
"~#8" = ("insertText:", "↑");
"~#2" = ("insertText:", "↓");
"~#4" = ("insertText:", "←");
"~#6" = ("insertText:", "β†’");

"~a" = ("insertText:", "Ξ±");
"~h" = ("insertText:", "ΞΈ");

"~3" = ("insertText:", "†");
"~7" = ("insertText:", "β€”");
"~8" = ("insertText:", "β€’");
"~9" = ("insertText:", "β˜…");

"~&" = ("insertText:", "β€£");
"~*" = ("insertText:", "Β°");

/* insert pairs with Option down */
"~d" = ("insertText:", "«»", "moveBackward:");
"~h" = ("insertText:", "{}", "moveBackward:");
"~t" = ("insertText:", "()", "moveBackward:");
"~n" = ("insertText:", "[]");
"~s" = ("insertText:", "β€œβ€", "moveBackward:");
"~-" = ("insertText:", "γ€Œγ€", "moveBackward:");

"~D" = ("insertText:", "β€Ήβ€Ί", "moveBackward:");
"~S" = ("insertText:", "β€˜β€™", "moveBackward:");
"~_" = ("insertText:", "γ€Žγ€", "moveBackward:");

/* insert sig */
"~1" = ("insertText:", "  John\n http://example.com/\n\nβ˜„");
}

Here's a example of ErgoEmacs Keybinding, one for QWERTY layout and one for Dvorak Keyboard Layout:

You can look at Xcode's keybinding file at /Developer/Applications/Xcode.app/Contents/Resources/PBKeyBinding.dict. You can view it here: osx_keybinding_xcode.dict.txt.

Emacs Keybinding

Mac OS X by default support emacs keybindings. They are:

You can add more of emacs's

However, i don't recommend it. Emacs's keys is very inefficient and ergonomically painful. See: Why Emacs's Keyboard Shortcuts are Painful. If you like a efficient keybinding for text editing, you might try: ErgoEmacs Keybinding.

Problems

Something this cannot do. For example:

There are many solutions to these. See:

Mac: Key Remapping, Keybinding Tools

Best is to get a programable keyboard.

see Programable Keyboards with Onboard Memory

See: Problems of Mac OS X's Keybinding Scheme DefaultKeyBinding.dict.

Reference

back to Keyboard Shortcut and Layout Tutorial

If you have a question, put $5 at patreon and message me.

Mac Keyboard Topic