Dove è memorizzato l'elenco Sostituisci / Con?

3

Questo elenco, quello a cui si accede da Preferenze di Sistema / Tastiera / Testo, è scomparso quando ho aggiornato a 10.9.2 (è sopravvissuto all'aggiornamento iniziale di Mavericks). Scrivo molto per le scienze e ho passato anni a costruire questa lista. (recente MacBook Pro, 10.9.2).

Alcuni siti dicono che dovrei ottenere il file /Users/username/Library/Preferences/.GlobalPreferences.plist da un backup, ma ho cercato nell'HD del mio altro computer (stesse caratteristiche ma eseguendo 10.9.1, Sostituisci / Con la lista intatta), e non riesco a trovare alcun file di questo tipo.

Altri siti dicono che è nell'array "NSUserDictionaryReplacementItems" in 10.9, ma sfortunatamente non so cosa significhi. (Sono un utente, non un programmatore.)

Ho sentito che potrebbe essere collegata alla nuova capacità di Mavericks di sincronizzare questo elenco con i dispositivi iOS, ma questo non spiega ancora perché non riesco a trovarlo sulla mia macchina 10.9.1, che è stata sincronizzata al mio telefono (iPhone 4, iOS 5.x) per anni.

    
posta user72789 12.03.2014 - 08:13
fonte

4 risposte

5

In 10.9 le sostituzioni di testo sono anche memorizzate in ~/Library/Dictionaries/CoreDataUbiquitySupport/$USER~*/UserDictionary/local/store/UserDictionary.db . UserDictionary.db è utilizzato anche se iCloud è disabilitato e ha la precedenza su .GlobalPreferences.plist .

Se per esempio esegui defaults write -g NSUserDictionaryReplacementItems '({on=1;replace=aa;with=bb;})' e chiudi e riapri TextEdit, aa viene sostituito con bb in TextEdit, ma le modifiche vengono ripristinate se apri la scheda Testo del pannello delle preferenze della tastiera.

Puoi modificare sia UserDictionary.db sia .GlobalPreferences.plist utilizzando uno script come questo:

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

Nelle versioni 10.8 e precedenti di OS X le sostituzioni di testo sono memorizzate nell'array NSUserReplacementItems (non NSUserDictionaryReplacementItems ) in ~/Library/Preferences/.GlobalPreferences.plist .

    
risposta data 17.04.2014 - 12:32
fonte
3

Ho trovato un modo più semplice per farlo.

Utilizza questi passaggi per esportare le sostituzioni di testo esistenti: - Apri le Preferenze di Sistema > Tastiera > Testo.

  • Seleziona i collegamenti che desideri esportare. Se desideri esportare tutte le sostituzioni di testo, selezionane una, quindi seleziona Seleziona tutto dal menu Modifica.

  • Trascina i collegamenti selezionati sul desktop. Questo crea un nome di file Text Substitutions.plist che contiene le sostituzioni selezionate.

  • Chiudi la finestra delle Preferenze di Sistema.

Utilizzare questa procedura per importare il file plist creato in un altro account utente: - Copia il file plist precedentemente creato nella cartella / Users / Shared / o su un'unità esterna.

  • Accedi come account utente in cui desideri utilizzare queste sostituzioni di testo.

  • Apri le Preferenze di Sistema > Tastiera > Testo.

  • Trascina il file Sostituisci testo nell'area nell'area della finestra Preferenze di sistema in cui vengono visualizzate le sostituzioni del testo (in Sostituisci o Con).

  • Chiudi la finestra delle Preferenze di Sistema.

fonte: link

    
risposta data 16.10.2015 - 23:52
fonte
0

Le preferenze sono memorizzate in NSUserDictionaryReplacementItems in ~ / Library / Preferences / .GlobalPreferences.plist.

Puoi leggere il contenuto aprendo il file e guardandolo, oppure eseguendo:

defaults read -g NSUserDictionaryReplacementItems

Per copiare le tue preferenze su un'altra macchina, prendi l'output del comando precedente ed esegui il seguente comando per scrivere le tue impostazioni:

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

Sostituisci il contenuto dell'array alla fine del comando con le sostituzioni che desideri.
-array-add si aggiunge alla fine dell'array. Usa -array per sostituire l'intero array.

    
risposta data 12.03.2014 - 08:22
fonte
0

Ho scritto uno script per il backup e il ripristino del database. Non è necessario estrarre nulla da .GlobalPreferences.plist, basta copiare il db e aprire le preferenze di systeme per ricaricare le impostazioni.

############
#!/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
    
risposta data 04.12.2014 - 16:30
fonte

Leggi altre domande sui tag