Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

shortcuts - a command line interface to your text replacements on macOS

This simple utility allows you to view, update, create and delete text substitutions used in Cocoa-based applications.

⚠️ Compatibility Warning

shortcuts is built on top of macOS' private APIs (InputMethodKit.framework for 10.11, KeyboardServices.framework for 10.12+) so any OS update (especially a major one) could break the utility. If this ever happens I'll try my best to fix it as soon as possible, so stay tuned!

There're two branches in this repo: v1.x for El Capitan (10.11) and master for Sierra (10.12) and High Sierra (10.13). The former is in maintaince mode mostly so it won't receive any new features (but I'll try to backport bug fixes from master, so don't worry).

If you're installing shortcuts via Homebrew the appropriate version is installed automatically based on your macOS revision.


You can install shortcuts with Homebrew:

$ brew install rodionovd/taps/shortcuts

Please note that you'll need Xcode in order to compile the project. If you don't use Xcode, download a pre-built binary and put it into /usr/local/bin/ or any other suitable location.


Listing all text replacements

$ shortcuts read [--as-plist]

You can specify --as-plist modifier to generate a property list file suitable for dragging into Keyboard Preferences Pane (see How to export and import text substitutions in OS X for details).

Importing new entries

You can import new text replacement entries either from a property list (see above)

$ shortcuts import [--force] /path/to/input.plist

or manully like this

$ shortcuts create [--force] <shortcut> <phrase>

The default conflict resolution strategy is that the existing entries will not be overwritten with those from the input file/command line. You should use the --force flag to update existing entries (i.e. for the same <shortcut>).

Updating shortcuts

As simple as

$ shortcuts update <shortcut> <new phrase>

Currently this command is an alias for the create --force command.

Deleting shortcuts

$ shortcuts delete <shortcut>

Well that's it.

Made by Internals Exposed @ 2016-2018.