如何在命令行中创建文本替换,而不是在“系统偏好设置”>“键盘”>“文本”中创建文本替换

如何在命令行中创建文本替换,而不是在“系统偏好设置”>“键盘”>“文本”中创建文本替换

有没有办法在命令行中创建文本替换而不是System Preferences> Keyboard> Text

我看到当您导出文本替换时,它会创建一个 html 文件,所以我不确定您是否需要创建一个类似的 html 文件来导入它们。

原因是我有很多在 Windows 中创建的快捷键,想在 Mac 上重新创建它们。我不想在 GUI 中创建每个快捷键。我想知道是否有命令行替代方案,因为 Mac 是 Unix 风格的操作系统。

答案1

生成要导入的 plist 文件的另一种方法是使用简单的 Python 脚本。Python 内置了对 Apple plist 文件的支持。

假设有一个名为“substitutions.csv”的文件(CSV),其中包含“快捷方式”和“短语”标题。

shortcut,phrase
mename,Frodo

并且 Python 脚本generate_substitions.py与上面的文件位于同一文件夹中.csv


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import csv
import plistlib

with open('./substitutions.plist', 'wb+') as _plist:
    with open('./substitutions.csv') as _f:
        csvfile = csv.DictReader(_f)
        plistlib.dump(list(csvfile), _plist)

在终端中运行它。

chmod +x generate_substitutions.py
./generate_substitutions.py

然后将生成的.plist文件拖到系统偏好设置 > 键盘 > “文本”文本替换窗口中。将添加新的替换,并更新现有的替换(与快捷方式匹配)。

答案2

虽然您希望通过命令行解决您的问题,但在这种情况下,AppleScript 是迄今为止更好的选择,因为生成新的 plist 数据要简单得多。

下面的脚本将获取包含旧 Windows 文本替换的指定 CSV 文本文件的内容,并使用它来生成.plist可直接导入的文件系统偏好设置通过拖放。

要运行脚本,你需要打开脚本编辑器并进行以下细微调整以适合您的特定选择:

  • 将属性的值csvf(第 1 行)更改为 CSV 文件所在的路径。我的路径是桌面,它被称为substitutions.txt
  • 如果您确实有此想法,您可以将属性值plistf(第 2 行)更改为新路径。但是,此文件是临时的,您稍后用完后会将其丢弃;
  • 最后,将属性更改text item delimiters为作为 CSV 数据字段分隔符的字符。我目前将其设置为|,我的示例 CSV 文件如下所示:
    ABCDEFG|äbçdêfg
    1234567|0000000
    
    它对应两次文本替换,第一次映射ABCDEFG到国际小写字母等效字符,第二次映射1234567到七个零。

该脚本有大量注释来描述每个部分的作用。但它也很短,不需要太多关注。运行后,文件substitutions.plist应该出现在您的桌​​面上。打开系统偏好设置 > 键盘 > 文本并将.plist文件拖拽到大列表框中即可立即导入。

    property csvf : "~/Desktop/substitutions.txt" -- CSV file containing substitions to import
    property plistf : "~/Desktop/substitutions.plist" -- Plist file to which data is outputted 
    property text item delimiters : "|" -- The CSV field separator used in the csvf file
    property ReplacementItem : {phrase:missing value, shortcut:missing value}
    global ReplacementItems

    on run
        set ReplacementItems to {} -- a list to store text replacement record data

        -- Read CSV values from text file and use
        -- them to create new text replacement items
        readFromCSVFile at csvf

        -- Create plist file
        tell application "System Events" to set the value ¬
            of (make new property list file ¬
            with properties {name:plistf}) ¬
            to the ReplacementItems
    end run

    -- This handler receives arguments A and B, and creates
    -- a new text replacement record that will be used to
    -- map (substitute) text A to text B.
    on textReplacementToMap from A as text to B as text
        local A, B

        tell the ReplacementItem
            set its shortcut to A
            set its phrase to B
        end tell

        copy the ReplacementItem to the end of the ReplacementItems
    end textReplacementToMap

    -- This handler receives a file path to a CSV file
    -- that contains a CSV-formatted list of text
    -- substitutions that will be read and used to create
    -- the new text replacement mappings
    to readFromCSVFile at f as text
        local f

        tell application "System Events"
            if not (file f exists) then return
            set POSIXfile to the POSIX path of file f
        end tell

        read the POSIXfile as «class utf8»

        repeat with CSVitem in paragraphs of result
            try
                set [A, B] to CSVitem's text items
                textReplacementToMap from A to B
            end try
        end repeat
    end readFromCSVFile

相关内容