有没有办法在命令行中创建文本替换而不是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