¿Dónde se almacena la lista Reemplazar/Con?

Esta lista, a la que se accede mediante Preferencias del sistema/Teclado/Texto, desapareció cuando actualicé a 10.9.2 (sobrevivió a la actualización inicial de Mavericks). Escribo mucho para las ciencias, y he pasado años construyendo esa lista. (MacBook Pro reciente, 10.9.2).

Algunos sitios dicen que debería obtener el archivo /Users/username/Library/Preferences/.GlobalPreferences.plist de una copia de seguridad, pero he buscado en el HD de mi otra computadora (mismas especificaciones pero con 10.9.1, Reemplazar/Con lista intacta ), y no puedo encontrar tal archivo.

Otros sitios dicen que está en la "matriz NSUserDictionaryReplacementItems" en 10.9, pero desafortunadamente no sé qué significa eso. (Soy un usuario, no un programador.)

Escuché que puede estar relacionado con la nueva capacidad de Mavericks para sincronizar esta lista con dispositivos iOS, pero eso aún no explica por qué no puedo encontrarlo en mi máquina 10.9.1, que se ha estado sincronizando con mi teléfono. (iPhone 4, iOS 5.x) durante años.

Respuestas (4)

En 10.9, los reemplazos de texto también se almacenan en formato ~/Library/Dictionaries/CoreDataUbiquitySupport/$USER~*/UserDictionary/local/store/UserDictionary.db. UserDictionary.dbse usa incluso si iCloud está deshabilitado y tiene prioridad sobre .GlobalPreferences.plist.

Si, por ejemplo, ejecuta defaults write -g NSUserDictionaryReplacementItems '({on=1;replace=aa;with=bb;})', sale y vuelve a abrir TextEdit, aase reemplaza por bbTextEdit, pero los cambios se revierten si abre la pestaña Texto del panel de preferencias Teclado.

Puede cambiar ambos UserDictionary.dby .GlobalPreferences.plistusando un script como este:

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

En 10.8 y versiones anteriores de OS X, los reemplazos de texto se almacenan en la NSUserReplacementItemsmatriz (no en NSUserDictionaryReplacementItems) en ~/Library/Preferences/.GlobalPreferences.plist.

¿Cómo funciona exactamente ese script? ¿Cómo y cuándo debo ejecutarlo? ¿Puede ampliar su respuesta con algunos detalles más sobre esto? Conseguí que todo funcionara como quiero al editar el archivo manualmente, pero como dijiste, al abrir las Preferencias del sistema se borran mis elementos personalizados.
@CodyGray El script lee el archivo replaces.txt en su directorio de inicio e inserta definiciones de reemplazo de este archivo tanto en .GlobalPreferences.plist como en UserDictionary.db . Cada línea del archivo debe contener exactamente dos palabras: what_to_replace replace_withseparadas por espacios en blanco.
Esto parece estar fallando en macOS 10.13 (High Sierra). Todavía estoy buscando una alternativa.

Encontré una manera más fácil de hacerlo.

Utilice estos pasos para exportar sus sustituciones de texto existentes:

  • Abra Preferencias del sistema > Teclado > Texto.

  • Seleccione los accesos directos que desea exportar. Si desea exportar todas sus sustituciones de texto, seleccione una de ellas y luego elija Seleccionar todo en el menú Editar.

  • Arrastre los accesos directos seleccionados al escritorio. Esto crea un archivo con el nombre Text Substitutions.plist que contiene las sustituciones que seleccionó.

  • Cierra la ventana de Preferencias del sistema.

Utilice estos pasos para importar el archivo plist que creó en otra cuenta de usuario:

  • Copie el archivo plist que creó anteriormente en la carpeta /Users/Shared/ o en una unidad externa.

  • Inicie sesión como la cuenta de usuario en la que desea utilizar estas sustituciones de texto.

  • Abra Preferencias del sistema > Teclado > Texto.

  • Arrastre el archivo Sustituciones de texto.plist al área de la ventana Preferencias del sistema donde se muestran las sustituciones de texto (bajo Reemplazar o Con).

  • Cierra la ventana de Preferencias del sistema.

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

Esto es genial y realmente accesible para el usuario promedio. ¡Perfecto!
Aquí está la versión de terminal (no oficial) apple.stackexchange.com/a/320265/375145

Las preferencias se almacenan en NSUserDictionaryReplacementItems en ~/Library/Preferences/.GlobalPreferences.plist.

Puede leer el contenido abriendo el archivo y examinándolo, o ejecutando:

defaults read -g NSUserDictionaryReplacementItems

Para copiar sus preferencias a otra máquina, tome la salida del comando anterior y ejecute el siguiente comando para escribir su configuración:

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

Reemplace el contenido de la matriz al final del comando con los reemplazos que desee.
-array-addse agrega al final de la matriz. Úselo -arraypara reemplazar toda la matriz.

Gracias por tu ayuda. Comenzaste diciendo que puedo leer el contenido abriendo ese archivo, pero no puedo encontrar ese archivo. (... y no sé qué es "NSUserDictionaryReplacementItems"... supongo que no es un elemento de GUI o una jerarquía de archivos/carpetas. ¿Una línea de comandos en UNIX?) No me siento cómodo escribiendo en Terminal ( Soy un usuario de computadoras, no un programador), pero tengo un amigo que podría venir y ayudarme con eso en una semana más o menos. Mientras tanto, ¿hay alguna forma de encontrar ese archivo .plist usando el Finder? ¡Gracias de nuevo!
@user72789 Dado que el archivo comienza con un punto, el archivo está oculto de forma predeterminada. Debe mostrar los archivos ocultos en Finder ( defaults write com.apple.finder AppleShowAllFiles -bool true && osascript -e 'quit app "Finder"') o abrirlos a través de la Terminal. NSUserDictionaryReplacementItems es una matriz en el archivo junto con otros datos. Es por eso que puede que no sea deseable copiar todo el archivo, de ahí mis comandos de Terminal en la respuesta.

He escrito un script para hacer una copia de seguridad y restaurar la base de datos. No es necesario extraer nada de .GlobalPreferences.plist, simplemente copie la base de datos y abra las preferencias del sistema para volver a cargar la configuración.

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