Как перенести все сочетания клавиш с одного компьютера Mac на другой?

2776
cwd

У меня есть много пользовательских сочетаний клавиш и будет миграция Mac. Я проверил Migration Assistant, и он, похоже, не получил их.

Я где-то читал, что они хранятся в plist-файлах отдельного приложения в ~/Library/Application Supportпапке, но даже после копирования нескольких из этих папок ярлыки, похоже, не следуют.

Как я могу перенести все сочетания клавиш на новый Mac?

screenshot-with-shadow.png

7

2 ответа на вопрос

8
user495470

The shortcuts that can be changed from the Application Shortcuts tab are stored in ~/Library/Preferences/.GlobalPreferences.plist and in the property lists of applications in ~/Library/Preferences/*.plist and ~/Library/Containers/*/Data/Library/Preferences/*.plist.

$ defaults find NSUserKeyEquivalents Found 1 keys in domain 'Apple Global Domain': { NSUserKeyEquivalents = { "Actual Size" = "@0"; "Automatic Fit" = "@9"; "Automatically Resize" = "@9"; "Browse All Versions..." = "^@v"; "Decrease Indent Level" = "^\\Uf702"; "Decrease Level" = "^\\Uf702"; "Decrease Paragraph Indent" = "^\\Uf702"; "Enter Full Screen" = "^@f"; "Enter Full Screen Mode" = "^@f"; "Exit Full Screen" = "^@f"; "Exit Full Screen Mode" = "^@f"; "Find Next" = "@g"; "Find Previous" = "$@g"; "Find and Replace..." = "~@f"; "Full Screen" = "^@f"; Fullscreen = "^@f"; "Increase Indent Level" = "^\\Uf703"; "Increase Level" = "^\\Uf703"; "Increase Paragraph Indent" = "^\\Uf703"; "Line Spacing..." = "~@l"; Minimize = "\001"; "Minimize All" = "\001"; "Move Line Down" = "^\\Uf701"; "Move Line Up" = "^\\Uf700"; "Next Tab" = "~@\\Uf703"; "Next Workspace" = "~@\\Uf703"; "Normal Screen" = "^@f"; "Original Size" = "@0"; "Previous Tab" = "~@\\Uf702"; "Previous Workspace" = "~@\\Uf702"; "Remove Full Screen" = "^@f"; Reveal = "$@r"; "Select Next Tab" = "~@\\Uf703"; "Select Next Tab View" = "~@\\Uf703"; "Select Previous Tab" = "~@\\Uf702"; "Select Previous Tab View" = "~@\\Uf702"; "Shift Down" = "^\\Uf701"; "Shift Left" = "^\\Uf702"; "Shift Right" = "^\\Uf703"; "Shift Up" = "^\\Uf700"; "Show Next Tab" = "~@\\Uf703"; "Show Previous Tab" = "~@\\Uf702"; "Show in Finder" = "$@r"; "Toggle Full Screen" = "^@f"; "Use Selection for Find" = "@e"; "Zoom Reset" = "@0"; "Zoom to Fit" = "@9"; }; } Found 1 keys in domain 'com.panic.Transmit': { NSUserKeyEquivalents = { "Hide Invisible Files" = "$@."; Refresh = "@r"; "Show Invisible Files" = "$@."; "Synchronize..." = "$@y"; }; } Found 1 keys in domain 'net.sourceforge.skim-app.skim': { NSUserKeyEquivalents = { Crop = "@k"; "Single Page" = "$@1"; "Single Page Continuous" = "$@0"; "Two Pages" = "$@2"; }; } Found 1 keys in domain 'com.googlecode.iterm2': { NSUserKeyEquivalents = { "Next Pane" = "@\\Uf703"; "Open Autocomplete..." = "@;"; "Previous Pane" = "@\\Uf702"; "Select Pane Above" = "@\\Uf700"; "Select Pane Below" = "@\\Uf701"; }; } Found 1 keys in domain 'net.notational.velocity': { NSUserKeyEquivalents = { Bold = "\001"; Delete = "$@d"; Italic = "\001"; "Plain Text Style" = "\001"; Strikethrough = "\001"; }; } Found 1 keys in domain 'com.apple.Safari': { NSUserKeyEquivalents = { "Mail Contents of This Page" = "\001"; "Reopen All Windows from Last Session" = "~$@r"; "Reopen Last Closed Window" = "~@r"; }; } Found 1 keys in domain 'com.hogbaysoftware.WriteRoom.mac': { NSUserKeyEquivalents = { "Column 120" = "$@7"; "Column 200" = "$@8"; "Column 40" = "$@1"; "Column 50" = "$@2"; "Column 60" = "$@3"; "Column 66" = "$@4"; "Column 80" = "$@5"; "Column 90" = "$@6"; "Column Window Width" = "$@0"; "Enter Full Screen" = "$@f"; "Enter Full Screen Single" = "^@f"; "Exit Full Screen" = "$@f"; "Exit Full Screen Single" = "^@f"; }; } 

I actually use a shell script like this to configure the shortcuts:

defaults write -g NSUserKeyEquivalents '{ "Browse All Versions..." = "^@v"; "Minimize" = "\1"; "Minimize All" = "\1"; "Show Previous Tab" = "~@\Uf702"; "Show Next Tab" = "~@\Uf703"; }' defaults write -app Safari NSUserKeyEquivalents '{ "Reopen Last Closed Window" = "~@r"; "Reopen All Windows from Last Session" = "~$@r"; "Mail Contents of This Page" = "\1"; }' 

The shortcut strings use the same format as in DefaultKeyBinding.dict. You can remove a shortcut by assigning a menu item to \1. If you assign a menu item to nil, it is triggered when you press n in some applications like Audacity. If you assign a menu item to to \0, it is triggered when you press any key in Safari in 10.9.

Note that preferences are cached in Mavericks. Changes made with defaults are still applied after you just quit and reopen an application. But if you edit a plist directly or replace the plist, you also have to run killall cfprefsd or defaults read /path/to/plist.

5
Alan Shutko

Thanks to the existing answer, I've built a script which will save the shortcuts into a script to be run on other machines.

#!/bin/sh # save-hotkeys.sh DESTFILE=~/Dropbox/install-hotkeys.sh echo '#!/bin/bash' > $DESTFILE defaults find NSUserKeyEquivalents | sed -e "s/Found [0-9]* keys in domain '\\([^']*\\)':/defaults write \\1 NSUserKeyEquivalents '/" -e "s/ NSUserKeyEquivalents = {//" -e "s/};//" -e "s/}/}'/" >> $DESTFILE echo killall cfprefsd >> $DESTFILE chmod a+x $DESTFILE 

Save this into a file called save-hotkeys.sh and execute it by running sh save-hotkeys.sh. On the remote machine, execute ./install-hotkeys.sh while in the same directory as the file. In my example, I save the file to dropbox so that it is synced to my other machines.

Привет Алан, это здорово. Как запустить этот скрипт? Сохранить это в файл? Какое расширение должно быть? Запустить его, дважды щелкнув файл? angry kiwi 9 лет назад 0
Добавлено объяснение, как его использовать. Alan Shutko 9 лет назад 0
@ Алан Шутко, я получил эту ошибку при выполнении горячих клавиш сохранения: Af-MacBook-Pro: HD 2 af $ sh save-hotkeys.sh save-hotkeys.sh: строка 5: / Users / Af / Dropbox / install -hotkeys.sh: нет такого файла или каталога angry kiwi 9 лет назад 0
Привет, Алан? angry kiwi 9 лет назад 0
@runrunforest: Ваш сценарий оболочки завершился неудачно, потому что у вас не было создано каталога `~ / Dropbox`. daniel Azuelos 8 лет назад 0
macOS 10.12 Sierra: ключ `NSUserKeyEquivalents` содержит настройки из« Системных настроек> Клавиатура> Ярлыки> Ярлыки приложения ». Но как мне включить настройки из `Системные настройки> Клавиатура> Ярлыки> Сервисы? Их больше нет в домене `.GlobalPreferences.plist`, который также называется Apple Global Domain. ** В каком домене и ключе они хранятся сейчас? ** porg 7 лет назад 0
Справочная информация: теперь, начиная с macOS 10.12.1 Sierra, проблема в том, что привязки клавиш для Сервисов иногда теряются без каких-либо обновлений ОС или Сервисов! Я предполагаю, что потеря привязок клавиш происходит во время перезапусков системы или, может быть, даже чаще во время сеансов? Таким образом, я намеревался использовать сценарий в качестве инструмента резервного копирования / восстановления для спасения, при необходимости в качестве сценария запуска, так как я ненавижу делать это вручную снова и снова. Но, к сожалению, ** привязки ключей служб ** не включены, и это те, которые теряются. ** У ярлыков приложений ** проблем не было. porg 7 лет назад 0
История: Этот сценарий работал нормально, когда я установил новую OS X 10.9 для переноса своих настроек 10.6.8. Недавно я обновился с 10,9 до 10,12. После публикации Стивом Джобсом Apple не справляется с контролем качества, мне кажется, что я обновляю только каждые 2-е или 3-е крупные обновления ОС, поскольку они содержат слишком много ошибок в младших версиях x.1. * И даже x.2. * И множество профессиональных функций пользователя. или перерыв в настройке во время обновления, то есть доказательство этой проблемы, которое приводит к высокой производительности, поэтому я пропускаю 1-2 обновления ОС. porg 7 лет назад 0
`~ / Library / Preferences / pbs.plist` - это место хранения настроек Сервиса в macOS 10.12 Sierra, содержащее названия сервисов и состояние видимости в главном меню и контекстных меню, а также привязки клавиш пользователя. Страница man для `pbs` говорит, что` pbs - это агент для меню Сервисов. Он ищет и продает доступные Сервисы, чтобы заполнить меню Сервисов. Этот список содержит переменную `key_equivalent` для каждого Сервиса с пользовательской привязкой ключа. Как правильно добавить это в ваш скрипт резервного копирования / восстановления? porg 7 лет назад 0
Это чертовски круто! Престижность! Ze'ev 6 лет назад 0