Wo wird die Ersetzen/Durch-Liste gespeichert?

Diese Liste, auf die über Systemeinstellungen/Tastatur/Text zugegriffen wurde, verschwand, als ich auf 10.9.2 aktualisierte (sie überlebte das erste Update auf Mavericks). Ich schreibe viel für die Wissenschaften und habe Jahre damit verbracht, diese Liste aufzubauen. (aktuelles MacBook Pro, 10.9.2).

Einige Seiten sagen, ich solle die Datei /Users/username/Library/Preferences/.GlobalPreferences.plist aus einer Sicherung abrufen, aber ich habe die HD meines anderen Computers durchsucht (gleiche Spezifikationen, aber mit 10.9.1, Liste Replace/With intakt ), und ich kann keine solche Datei finden.

Andere Websites sagen, dass es sich in 10.9 im "NSUserDictionaryReplacementItems-Array" befindet, aber leider weiß ich nicht, was das bedeutet. (Ich bin ein Benutzer, kein Programmierer.)

Ich habe gehört, dass es möglicherweise mit der neuen Fähigkeit von Mavericks verknüpft ist, diese Liste mit iOS-Geräten zu synchronisieren, aber das erklärt immer noch nicht, warum ich sie auf meinem 10.9.1-Computer nicht finden kann, der mit meinem Telefon synchronisiert wurde (iPhone 4, iOS 5.x) seit Jahren.

Antworten (4)

In 10.9 werden die Textersetzungen auch in gespeichert ~/Library/Dictionaries/CoreDataUbiquitySupport/$USER~*/UserDictionary/local/store/UserDictionary.db. UserDictionary.dbwird auch dann verwendet, wenn iCloud deaktiviert ist und Vorrang vor hat .GlobalPreferences.plist.

Wenn Sie beispielsweise defaults write -g NSUserDictionaryReplacementItems '({on=1;replace=aa;with=bb;})'TextEdit ausführen und beenden und erneut öffnen, wird in TextEdit aadurch ersetzt , aber die Änderungen werden rückgängig gemacht, wenn Sie die Registerkarte „Text“ im Einstellungsbereich „Tastatur“ öffnen.bb

Sie können beides ändern UserDictionary.db, .GlobalPreferences.plistindem Sie ein Skript wie dieses verwenden:

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%?})"

In 10.8 und früheren Versionen von OS X werden die Textersetzungen im NSUserReplacementItemsArray (nicht NSUserDictionaryReplacementItems) in gespeichert ~/Library/Preferences/.GlobalPreferences.plist.

Wie genau funktioniert dieses Skript? Wie und wann soll ich es ausführen? Können Sie Ihre Antwort mit ein paar weiteren Details dazu erweitern? Ich habe alles so funktioniert, wie ich es möchte, indem ich die Datei manuell bearbeitet habe, aber wie Sie sagten, löscht das Öffnen der Systemeinstellungen meine benutzerdefinierten Elemente.
@CodyGray Das Skript liest die Datei replaces.txt in Ihrem Home-Verzeichnis und fügt Ersetzungsdefinitionen aus dieser Datei sowohl in .GlobalPreferences.plist als auch in UserDictionary.db ein . Jede Zeile der Datei sollte genau zwei Wörter enthalten: what_to_replace replace_withdurch Leerzeichen getrennt.
Dies scheint in macOS 10.13 (High Sierra) fehlzuschlagen. Ich suche noch nach einer Alternative.

Ich habe einen einfacheren Weg gefunden, es zu tun.

Verwenden Sie diese Schritte, um Ihre vorhandenen Textersetzungen zu exportieren:

  • Öffnen Sie Systemeinstellungen > Tastatur > Text.

  • Wählen Sie die Verknüpfungen aus, die Sie exportieren möchten. Wenn Sie alle Ihre Textersetzungen exportieren möchten, wählen Sie eine davon aus und wählen Sie dann „Alle auswählen“ aus dem Menü „Bearbeiten“.

  • Ziehen Sie die ausgewählten Verknüpfungen auf den Desktop. Dadurch wird eine Datei mit dem Namen Text Substitutions.plist erstellt, die die von Ihnen ausgewählten Ersetzungen enthält.

  • Schließen Sie das Fenster Systemeinstellungen.

Verwenden Sie diese Schritte, um die Plist-Datei zu importieren, die Sie in einem anderen Benutzerkonto erstellt haben:

  • Kopieren Sie die zuvor erstellte plist-Datei in den Ordner /Users/Shared/ oder auf ein externes Laufwerk.

  • Melden Sie sich mit dem Benutzerkonto an, in dem Sie diese Textersetzungen verwenden möchten.

  • Öffnen Sie Systemeinstellungen > Tastatur > Text.

  • Ziehen Sie die Datei „Text Substitutions.plist“ in den Bereich des Fensters „Systemeinstellungen“, in dem die Textersetzungen angezeigt werden (unter „Ersetzen“ oder „Durch“).

  • Schließen Sie das Fenster Systemeinstellungen.

Quelle: https://support.apple.com/en-in/guide/mac-help/mchl2a7bd795/mac

Das ist großartig und für den durchschnittlichen Benutzer wirklich zugänglich. Perfekt!
Hier ist die Terminalversion (inoffiziell) apple.stackexchange.com/a/320265/375145

Die Einstellungen werden in NSUserDictionaryReplacementItems in ~/Library/Preferences/.GlobalPreferences.plist gespeichert.

Sie können den Inhalt lesen, indem Sie die Datei öffnen und durchsehen oder indem Sie Folgendes ausführen:

defaults read -g NSUserDictionaryReplacementItems

Um Ihre Einstellungen auf einen anderen Computer zu kopieren, nehmen Sie die Ausgabe des vorherigen Befehls und führen Sie den folgenden Befehl aus, um Ihre Einstellungen zu schreiben:

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

Ersetzen Sie den Inhalt des Arrays am Ende des Befehls durch die gewünschten Ersetzungen.
-array-addwird an das Ende des Arrays angehängt. Verwenden Sie diese Option -array, um das gesamte Array zu ersetzen.

Vielen Dank für Ihre Hilfe. Sie begannen mit der Aussage, dass ich den Inhalt lesen kann, indem ich diese Datei öffne, aber ich kann diese Datei nicht finden. (... und ich weiß nicht, was "NSUserDictionaryReplacementItems" ist ... ich nehme an, kein GUI-Element oder Datei-/Ordner-Hierarchie-Ding? Ein Befehlszeilen-Ding in UNIX?) Ich fühle mich nicht wohl dabei, in Terminal ( Ich bin ein Computerbenutzer, kein Programmierer), aber ich habe einen Freund, der vielleicht in einer Woche oder so vorbeikommen und mir dabei helfen kann. Gibt es in der Zwischenzeit eine Möglichkeit, diese .plist-Datei mit dem Finder zu finden? Danke noch einmal!
@user72789 Da die Datei mit einem Punkt beginnt, ist die Datei standardmäßig ausgeblendet. Sie müssen versteckte Dateien im Finder ( defaults write com.apple.finder AppleShowAllFiles -bool true && osascript -e 'quit app "Finder"') anzeigen oder über das Terminal öffnen. NSUserDictionaryReplacementItems ist ein Array in der Datei zusammen mit anderen Daten. Aus diesem Grund ist es möglicherweise nicht wünschenswert, die gesamte Datei zu kopieren, daher meine Terminalbefehle in der Antwort.

Ich habe ein Skript zum Sichern und Wiederherstellen der Datenbank geschrieben. Es ist nicht erforderlich, etwas aus .GlobalPreferences.plist zu extrahieren, kopieren Sie einfach die Datenbank und öffnen Sie die Systemeinstellungen, um die Einstellungen neu zu laden.

############
#!/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