Где хранится список «Заменить/На»?

Этот список, доступный через Системные настройки/Клавиатура/Текст, исчез, когда я обновился до 10.9.2 (он пережил первоначальное обновление до Mavericks). Я много пишу для науки, и я потратил годы на составление этого списка. (последний MacBook Pro, 10.9.2).

Некоторые сайты говорят, что я должен получить файл /Users/username/Library/Preferences/.GlobalPreferences.plist из резервной копии, но я искал HD моего другого компьютера (те же характеристики, но с 10.9.1, заменить/со списком нетронутым ), и я не могу найти такой файл.

Другие сайты говорят, что он находится в «массиве NSUserDictionaryReplacementItems» в 10.9, но, к сожалению, я не знаю, что это значит. (Я пользователь, а не программист.)

Я слышал, что это может быть связано с новой возможностью Mavericks синхронизировать этот список с устройствами iOS, но это все равно не объясняет, почему я не могу найти его на своем компьютере с 10.9.1, который синхронизировался с моим телефоном. (iPhone 4, iOS 5.x) годами.

Ответы (4)

В версии 10.9 замены текста также хранятся в файлах ~/Library/Dictionaries/CoreDataUbiquitySupport/$USER~*/UserDictionary/local/store/UserDictionary.db. UserDictionary.dbиспользуется, даже если iCloud отключен и имеет приоритет над .GlobalPreferences.plist.

Если вы, например, запускаете defaults write -g NSUserDictionaryReplacementItems '({on=1;replace=aa;with=bb;})', выходите и снова открываете TextEdit, aaон заменяется на bbв TextEdit, но изменения отменяются, если вы открываете вкладку «Текст» на панели настроек клавиатуры.

Вы можете изменить оба UserDictionary.dbи .GlobalPreferences.plistс помощью скрипта, подобного этому:

date=$(date +%s)
while read -r replace with; do
  plist+="{on=1;replace=\"$replace\";with=\"$with\";},"
  sql+="INSERT INTO 'ZUSERDICTIONARYENTRY' VALUES($((++i)),1,1,0,0,0,0,$date,NULL,NULL,NULL,NULL,NULL,\"$with\",\"$replace\",NULL);"
done < <(sed 's/\\/\\\\/g;s/"/\\"/g' ~/replacements.txt)
sqlite3 ~/Library/Dictionaries/CoreDataUbiquitySupport/$USER~*/UserDictionary/local/store/UserDictionary.db "delete from ZUSERDICTIONARYENTRY;$sql"
defaults write -g NSUserDictionaryReplacementItems "(${plist%?})"

В 10.8 и более ранних версиях OS X замены текста хранятся в NSUserReplacementItemsмассиве (не NSUserDictionaryReplacementItems) в файлах ~/Library/Preferences/.GlobalPreferences.plist.

Как именно работает этот скрипт? Как и когда мне его запускать? Можете ли вы расширить свой ответ еще несколькими подробностями по этому поводу? У меня все работает так, как я хочу, отредактировав файл вручную, но, как вы сказали, открытие Системных настроек стирает мои пользовательские элементы.
@CodyGray Сценарий считывает файл replaces.txt в вашем домашнем каталоге и вставляет определения замены из этого файла как в .GlobalPreferences.plist , так и в UserDictionary.db . Каждая строка файла должна содержать ровно два слова: what_to_replace replace_withразделенных пробелом.
Похоже, это не работает в macOS 10.13 (High Sierra). Я все еще ищу альтернативу.

Я нашел более простой способ сделать это.

Используйте эти шаги для экспорта существующих текстовых замен:

  • Откройте «Системные настройки» > «Клавиатура» > «Текст».

  • Выберите ярлыки, которые вы хотите экспортировать. Если вы хотите экспортировать все замены текста, выберите одну из них, затем выберите «Выбрать все» в меню «Правка».

  • Перетащите выбранные ярлыки на рабочий стол. Это создает файл с именем Text Substitutions.plist, который содержит выбранные вами замены.

  • Закройте окно «Системные настройки».

Используйте эти шаги, чтобы импортировать файл plist, который вы создали в другой учетной записи пользователя:

  • Скопируйте ранее созданный файл plist в папку /Users/Shared/ или на внешний диск.

  • Войдите в систему как учетная запись пользователя, в которой вы хотите использовать эти замены текста.

  • Откройте «Системные настройки» > «Клавиатура» > «Текст».

  • Перетащите файл Text Substitutions.plist в область окна «Системные настройки», где отображаются замены текста (в разделе «Заменить» или «С»).

  • Закройте окно «Системные настройки».

источник: https://support.apple.com/en-in/guide/mac-help/mchl2a7bd795/mac

Это здорово и действительно доступно для обычного пользователя. Идеальный!
Вот версия терминала (неофициальная) apple.stackexchange.com/a/320265/375145

Настройки хранятся в NSUserDictionaryReplacementItems в ~/Library/Preferences/.GlobalPreferences.plist.

Вы можете прочитать содержимое, открыв файл и просмотрев его, или выполнив:

defaults read -g NSUserDictionaryReplacementItems

Чтобы скопировать свои настройки на другой компьютер, возьмите вывод предыдущей команды и выполните следующую команду, чтобы записать свои настройки:

defaults write -g NSUserDictionaryReplacementItems -array-add '{on=1;replace=foo;with=bar;}'

Замените содержимое массива в конце команды нужными заменами.
-array-addдобавляется в конец массива. Используйте -arrayдля замены всего массива.

Спасибо за вашу помощь. Вы начали с того, что я могу прочитать содержимое, открыв этот файл, но я не могу найти этот файл. (... и я не знаю, что такое "NSUserDictionaryReplacementItems"... не элемент графического интерфейса или не иерархия файлов/папок, как я полагаю? Это вещь командной строки в UNIX?) Мне неудобно печатать в Терминале ( Я пользователь компьютера, а не программист), но у меня есть друг, который мог бы прийти и помочь мне с этим примерно через неделю. Между тем, есть ли способ найти этот файл .plist с помощью Finder? Еще раз спасибо!
@user72789 user72789 Поскольку файл начинается с точки, он по умолчанию скрыт. Вам нужно показать скрытые файлы в Finder ( defaults write com.apple.finder AppleShowAllFiles -bool true && osascript -e 'quit app "Finder"') или открыть их через Терминал. NSUserDictionaryReplacementItems — это массив в файле вместе с другими данными. Вот почему может быть нежелательно копировать весь файл, отсюда и мои команды терминала в ответе.

Я написал скрипт для резервного копирования и восстановления базы данных. Нет необходимости что-либо извлекать из .GlobalPreferences.plist, просто скопируйте базу данных и откройте системные настройки, чтобы перезагрузить настройки.

############
#!/bin/bash

ME=$USER

DB_BACKUP_DIR=$HOME/Desktop
DB_BACKUP_FILE=$DB_BACKUP_DIR/UserDictionary.db

# Find the path where the replacement DB is:
PLIST=$HOME/Library/Preferences/com.apple.configurationprofiles.user.plist
UUID=$(defaults read "$PLIST" APNSTokens_Production|grep -E '^\s*"[0-9A-F-]*"'|cut -d\" -f2)

DB_RESTORE_DIR=$HOME/Library/Dictionaries/CoreDataUbiquitySupport/$ME~$UUID/UserDictionary/local/store
DB_RESTORE_FILE=$DB_RESTORE_DIR/UserDictionary.db

function Backup(){
    echo "Backup"
    [ \! -d "$DB_BACKUP_DIR" ] && echo "Backup directory does not exist" && echo "$DB_BACKUP_DIR" && exit 1
    echo "Copying database file"
    cp -fv "$DB_RESTORE_FILE" "$DB_BACKUP_FILE"
}

function Restore(){
    echo  "Restore"
    [ \! -r  "$DB_BACKUP_FILE" ] && echo "Cannot read the backup file" && echo "$DB_BACKUP_FILE" && exit 1
    [ \! -d "$DB_RESTORE_DIR" ] && echo "Creating Restore Directory" && echo "$DB_RESTORE_DIR"
    echo "Copying database file"
    cp -fv "$DB_BACKUP_FILE" "$DB_RESTORE_FILE"

    # The database has been copied, but OS X ignores it
    # until the tab System Preferences \ Keyboard \ Text is opened at least once
    # Use osascript to open and close System Preferences \ Keyboard \ Text
    osascript - <<EOC
 tell application "System Preferences"
    activate
    set the current pane to pane id "com.apple.preference.keyboard"
    reveal anchor "Text" of pane id "com.apple.preference.keyboard"
    quit
end tell
EOC

}

# Main
case "$1" in
-b)  Backup
     ;;
-r)  Restore
    ;;
 *) echo "Usage: $0 -b|-r"
    echo "\t\t-b: backup"
    echo "\t\t-r: restore"
    exit 0
    ;;
esac