MacOS – How to add autocorrect shortcuts programmatically

keyboardmacos

In System Preferences > Keyboard > Text, I can add shortcuts that will be available to me globally via autocorrect.

Keyboard section in System Preferences

Lets say I had 100 of these shortcuts and they were on two Macs, rather than adding/removing each individual item by hand, is there a way to maintain a single .plist file that could manage these shortcuts?

Best Answer

You can copy the settings to another Mac by copying ~/Library/Preferences/.GlobalPreferences.plist.

Note that preferences are cached on 10.9, so if you replace a plist or edit it directly, quitting and reopening applications won't apply the changes. You can apply the changes by running defaults read -g, by running killall cfprefsd, or by logging out and back in. Changes made with defaults are still applied if you just quit and reopen an application.

Print the current settings:

defaults read -g NSUserDictionaryReplacementItems

Add one setting:

defaults write -g NSUserDictionaryReplacementItems -array-add '{on=1;replace=cmd;with="⌘";}'

Replace all settings:

defaults write -g NSUserDictionaryReplacementItems '(
{on=1;replace=cmd;with="⌘";},
{on=1;replace=opt;with="⌥";}
)'

Print the current settings as XML:

defaults read -g NSUserDictionaryReplacementItems | plutil -convert xml1 - -o -

Replace all settings:

amp() { local x=${1//&/&amp; }; x=${x//</&lt; }; printf %s "${x//>/&gt; }"; }
out='<array>'
while IFS= read -r l; do
  out+="<dict><key>on</key><integer>1</integer><key>replace</key><string>$(amp "${l%% *}")</string><key>with</key><string>$(amp "${l#* }")</string></dict>"
done <<< 'cmd ⌘
opt ⌥'
defaults write -g NSUserDictionaryReplacementItems "$out</array>"

Replace NSUserDictionaryReplacementItems with NSUserReplacementItems in 10.8 and earlier.