进阶专题

命令行工具

用 wind_input 命令行管理配置、方案、词库、短语与备份,可脚本化批量操作

v0.122.0

清风输入法的主程序本身就是命令行工具:不带参数启动时是输入法服务,带子命令时执行一次操作后退出。适合脚本化配置、批量部署与故障排查。

可执行文件

文件说明
wind_input.exe主程序本体,同时是 CLI 入口
wind_cli.bat薄包装器,与主程序一同安装

两者都位于安装目录(正式版 C:\Program Files\WindInput\)。wind_cli.bat 做两件事:自动选择 release / dev 变体的 exe;首个参数不是已知子命令时自动补 config 前缀,因此 wind_cli get ui.theme.name 等价于 wind_input config get ui.theme.name。两者可互换使用,下文示例统一用 wind_input

命令行不会等它跑完

主程序是 GUI 子系统程序,shell 不会等待它结束——提示符会立即返回,输出随后才交错打印出来。

要拿到完整输出或在脚本中串联命令,必须重定向或显式等待:

wind_input schema list > out.txt 2>&1
start /wait wind_input schema rebuild

在线与离线

部分子命令需要输入法服务正在运行(走进程间通信),部分可直接操作文件:

子命令是否需要服务在线
config list / describe / get / export / check不需要,纯本地
config set / import优先在线(热重载);服务未运行时降级为直写配置文件,下次启动生效
schema / dict / phrase / backup需要
restart均可
ui 0.121 新增需要
system 0.121 新增不需要(但要管理员权限)
help / --version不需要

需要在线的命令在服务未运行时会明确报错并退出。这是有意的:这些操作会写入单写者数据库或方案覆盖层,离线直写会与运行中的实例冲突。

顶层命令

wind_input help                :: 顶层帮助(输出到 stdout)
wind_input --version           :: 版本、构建时间与 git hash
wind_input <子命令> help        :: 各子命令详细用法

没有 version 子命令,只有 --version / -V

同理也没有全局 --json 选项,JSON 只在特定命令的输出中出现(见下)。

config

唯一支持完全离线的子命令组。所有写入都经配置注册表校验,未知键、类型错误、枚举越界一律拒绝。

命令作用
config list [前缀]列出配置键与类型,可按前缀过滤
config describe <键>显示键的类型、可选值与当前值(别名 desc
config get <键>读取当前值
config set <键> <值>设置单个键
config export导出完整配置为 TOML 到 stdout
config import <文件.toml>批量导入
config check [--custom <目录>] [--data <目录>] 0.120 新增体检定制版数据层,打包前自查
wind_input config list ui.candidate
wind_input config describe ui.candidate.layout
wind_input config get ui.theme.name
wind_input config set ui.candidate.per_page 9
wind_input config export > my-config.toml
wind_input config import my-config.toml

在线成功时提示「已应用 N 项(已热重载)」;离线时提示「已写入 N 项(core 未运行,下次启动生效)」。

import 是全有或全无

导入前会校验全部条目,任一项不合法即整体中止,不会部分写入。

schema

管理输入方案配置与分类词库开关。需要服务在线。

命令作用
schema list列出已安装方案,* 标记当前激活
schema get <方案id>输出该方案完整配置(格式化 JSON)
schema get <方案id> <键>读取单个键(点路径)
schema set <方案id> <键> <值>写入定制层覆盖,方案文件本体不动
schema reset <方案id>清除该方案的全部定制
schema rebuild强制重建全部词库缓存
schema dict list <方案id>列出词库及启用状态
schema dict enable <方案id> <词库id>...启用附加词库(可一次多个
schema dict disable <方案id> <词库id>...停用附加词库(可一次多个
wind_input schema list
wind_input schema get wubi86
wind_input schema get wubi86 engine.codetable.max_code_length
wind_input schema set wubi86 engine.codetable.max_code_length 4
wind_input schema dict list wubi86
wind_input schema dict disable wubi86 wubi86_district
wind_input schema dict enable wubi86 wubi86_district wubi86_symbol
wind_input schema rebuild

几条重要约束:

  • schema set 拒绝 dictionaries 路径 —— 词库开关请用 schema dict enable|disable。词库是数组,点路径到不了,且覆盖层必须保持稀疏形态,否则会把整份词库定义冻结成快照
  • schema dict enable|disable 可一次传多个词库 id —— 会先整体校验(词库须存在、主库不可停用),任一非法即中止,不做部分应用
  • schema reset 不支持单键重置 —— 只能整体清除,传第二个参数会报用法错误
  • schema rebuild 不接受参数 —— 只支持全量重建
  • 值的类型按现有值推断 —— 布尔接受 true/1/yes/onfalse/0/no/off;数组与对象需写 JSON;现值为空的键会被拒绝
  • 不会凭空创建键 —— 拼错的键名会报错而非静默写入覆盖层

schema rebuild 输出「已清除 N 个缓存文件」,若附带「M 个仍被占用」,再执行一次即可清掉,不影响正确性。

theme 0.122 新增

列出主题、收发主题包(.wtheme)。需要服务在线。

命令作用
theme list列出已安装主题,* 标记当前生效
theme preview <包路径>只读查看一个 .wtheme 里装的是什么,不导入
theme import <包路径>导入主题包
theme export <主题id> <输出路径>把已装主题打成 .wtheme
wind_input theme list
wind_input theme preview D:\down\水墨.wtheme
wind_input theme import D:\down\水墨.wtheme
wind_input theme import D:\down\水墨.wtheme --force --id my-ink
wind_input theme export amber D:\分享\amber.wtheme

选项:

选项用于作用
--forceimport同 id 已存在时覆盖(默认拒绝并提示)
--id <主题id>import指定落到哪个目录 id(默认用包里的主题名)
--forceexport输出路径已有文件时覆盖(默认拒绝并提示)

几条值得知道的:

  • 内置主题也导得出 —— 改了内置主题的配色想发给别人,不必先手工复制一遍目录
  • 导入的若正是当前生效主题,会即时重新加载 —— 回执里会说明,不用重启
  • 导出失败不会动落点上原有的文件 —— 先写临时文件、自检通过才就位
  • preview 不落任何盘 —— 拿不准来路的包先用它看一眼
  • 主题包的格式与大小限制见主题包

dict

导入导出方案的用户数据。需要服务在线。

命令选项
dict export <方案id> <文件>--sections a,b,...
dict import <方案id> <文件>--replace(缺省为合并)、--sections a,b,...

可选的数据段:userWords(用户词库)、tempWords(临时词库)、freq(词频)、shadow(候选调整)。省略 --sections 时按引擎默认段处理。

wind_input dict export wubi86 backup.wdict
wind_input dict export wubi86 words.wdict --sections userWords,freq
wind_input dict import wubi86 words.wdict --replace --sections userWords

导入时自动识别 WindDict / Rime / TSV 格式,并逐段报告新增、更新、不变、跳过的条数。注意 export 不支持 --replace

phrase

管理快捷短语。需要服务在线。

命令作用
phrase export <文件>导出用户短语
phrase import <文件>导入用户短语(合并语义,同码同文以文件为准)
phrase reset-system恢复系统预置短语,不动你自建的短语
wind_input phrase export my-phrases.wdict
wind_input phrase import my-phrases.wdict
wind_input phrase reset-system

phrase import 没有替换模式,只有合并。要清空用户短语请用设置工具。

backup

完整备份与还原。需要服务在线。

命令选项
backup create <文件.zip>--stats(含统计)、--state(含界面状态)
backup inspect <文件.zip>——
backup restore <文件.zip>--replace(缺省为合并)、--sections a,b,...

可还原的域:configdicttempfreqshadowphrasecommon_charscharsetcompletion 0.122 新增schemasthemesstatestats

⚠️ 其中 common_chars(逐字常用性覆盖)与 charset(字符类)0.121 及以前虽然进了备份包,--sections 里写了却会被静默丢弃,0.122 起才真能单独还原。

wind_input backup create D:\bak\wind.zip --stats --state
wind_input backup inspect D:\bak\wind.zip
wind_input backup restore D:\bak\wind.zip --replace --sections config,phrase

inspect 会打印备份类型、创建时间、平台、版本与条目清单。restore 报告已还原项数,有冲突时提示「M 项已存在跳过;用 --replace 覆盖」。

还原后部分改动即时刷新,若界面显示异常重启输入法即可。

ui 0.121 新增

弹一条桌面提示,供计划任务与外部脚本使用(也是短语里 wind.cli("ui toast …") 的写法)。

wind_input ui toast "备份已完成"
wind_input ui toast "磁盘快满了" --kind error --pos top_right --ms 5000
wind_input ui toast "注意" --color #FF8800
选项默认取值
--kindinfoinfo / success / error
--color省略#RRGGBB#RRGGBBAA,给了则压过 --kind(两者不能同时给)
--posbottom_centercenter / top / top_center / bottom_center / top_left / top_right / bottom_left / bottom_right
--ms2500显示毫秒数

提示只能由输入法主进程弹出,故本命令需要服务在线。短语里的等价写法是 ui.toast(...),两者共用同一套校验。

system 0.121 新增

与操作系统集成方式相关的动作,写 HKLM,必须以管理员权限运行

wind_input system dota2-compat on       :: 开启 Valve 游戏兼容(用默认名称)
wind_input system dota2-compat on --name "中文 (简体) - 双拼"   :: 指定登记名称(0.122 起)
wind_input system dota2-compat off
wind_input system dota2-compat status   :: 显示当前登记的名称

Dota 2 按输入法在系统里登记的名称查一张内置白名单,决定要不要由游戏自己绘制候选;不在表内就取不到候选,还会多出一个左上角的系统 IME 小窗。开启后本输入法登记的名称改为 --name 给的那个(省略则用默认的「拼音输入法」)——语言栏、Windows 设置、输入法切换列表里显示的都会是那个名字,改完需重启游戏才生效。

名单里多数名称带空格,在命令行里必须整体加引号;比对是逐字全等的,差一个字符就不命中且不会报错。可选名称与各自的副作用见高级设置 · 游戏兼容

日常从设置页操作即可(高级 → 游戏兼容),设置程序会以 runas 拉起本子命令,你当场看到一次 UAC。本子命令不读配置、目标状态由参数显式给出——提权到另一个管理员账户时读配置会读到那个账户的数据。

路径与内部目录变量

dict / phrase / backup 的文件参数支持相对路径(相对当前终端的工作目录),也支持内部目录变量——用 ${变量名} 写法引用输入法自己的目录,无需硬编码安装位置或用户名(脚本跨机可移植):

变量指向典型位置
${APP_DIR}程序安装目录(wind_input.exe 所在目录)C:\Program Files\WindInput
${USER_DATA}漫游用户数据目录%APPDATA%\WindInput
${LOCAL_DATA}本机用户数据目录(不随漫游同步)%LOCALAPPDATA%\WindInput
wind_input backup create ${LOCAL_DATA}\backups\wind.zip
wind_input dict export wubi86 ${USER_DATA}\my-words.wdict
wind_input phrase import .\phrases.wdict

dev 变体(wind_input_dev.exe)自动指向 WindInputDev 对应目录。变量名拼错或 ${ 未闭合会报错退出,不会静默按字面目录写文件。含空格的路径在短语里用 wind.cli 时须用多参形式。

同样这三个变量在命令栏短语里也能用,写法一致。但两处对路径的转义规则不同,照搬时要留意:

反斜杠变量名拼错
命令行(本页)单个 \ 即可报错退出
命令栏短语必须写 \\原样保留字面,不报错

差异的来由:命令行参数由 shell 直接传给程序,不经短语解析;而短语字符串里 \ 是转义引导符,且 ${YC} 这类模板变量也用同样写法,不能把不认识的名字当错误吞掉。

restart

重启输入法服务,不接受任何参数

wind_input restart

服务在线时通过服务通道请求重启(与托盘菜单的「重启服务」同一条路径);服务未运行时直接启动它,提示「服务未运行,已直接启动」。

输出与退出码

输出流:成功结果走 stdout;错误走 stderr。注意各子命令的用法帮助输出到 stderr,只有顶层 wind_input help 走 stdout——管道处理时需留意。

成功提示统一以 开头,警告以 开头。

JSON 输出出现在这几处:schema get <方案id>(不带键时输出格式化 JSON)、schema get 命中数组或对象时、config get / config describe 的非字符串值(紧凑 JSON)。字符串值一律去掉引号裸输出。config export 输出的是 TOML

退出码

含义
0成功(含打印帮助)
1执行失败:服务未运行、远端报错、文件读写失败、键不存在、校验不通过
2用法错误:参数缺失、未知子命令、不支持的参数形式
127wind_cli.bat 找不到目标 exe

特例:config set / import 在线执行且全部条目都被跳过时返回 1

设置工具的命令行参数

以上子命令属于主程序 wind_input.exe设置工具是另一个可执行文件 wind_setting.exe(同在安装目录),它不接受上述子命令,只认自己的一组参数——用来在启动时直接定位到某个页面:

参数说明
--page <id> / --<id>定位到指定页:schema / input / keys / ui / dict / advanced / about
--tab <n>定位到第 n 个标签页
--light / --dark强制明 / 暗主题
wind_setting.exe --page keys
wind_setting.exe --about

设置工具是单实例的:已经开着时再执行一次,会激活已有窗口并切到目标页,不会开出第二个窗口。

--page dict 时可再带两个参数,直接落到某个方案的某类数据,省去进页面后手动选两级下拉:

参数取值
--schema <id>方案 id(如 wubi86)、引擎族名(pinyin / codetable / mixed)或 phrase(快捷短语)
--type <id>user-dict(别名 dict)/ temp / freq / shadow / phrase-system / phrase-user

两个参数各自可选,也可与快捷式 --dict 连用:

wind_setting.exe --page dict --schema wubi86 --type shadow   :: 五笔的候选调整
wind_setting.exe --page dict --type freq                     :: 当前数据域的词频
wind_setting.exe --dict --schema pinyin                      :: 拼音域,子标签沿用上次

双拼等方案在词库页被折叠进「拼音」域,传它们的 id 会落到拼音域。

定位不了不会报错,只会退一步

方案 id 拼错,或该方案没有请求的数据类型(比如拼音方案没有「候选调整」),设置工具会落到最接近的位置并弹提示说明,而不是打不开或停在错误的地方。

这组参数同样可以从命令直通车里用 setting.open("dict", "--schema=wubi86 --type=shadow") 触发,无需自己拼命令行。

在短语中调用

命令直通车的 wind.cli(...) 可以把上述任意子命令挂到短语上:

cocr = $CC("重建词库缓存", wind.cli("schema rebuild"))
cobk = $CC("备份", wind.cli("backup", "create", "D:\\我的 备份\\wind.zip"))

照搬终端里跑通的命令时有两点要改:每个参数写成独立的字符串(单参形式会按空白拆散,参数自己含空格就散了),以及字符串里的 { } 要写成 \{ \}(大括号在短语里是内插语法)。路径里的反斜杠同样写成 \\。两者写错都不报错——前者是配置没变、后者是候选里干脆没有这条短语。详见照搬终端命令的两道坎

注意它是发射后不管的,命令失败不会有任何提示

相关阅读

对这篇文档有疑问,或发现内容有误?

欢迎到文档仓库提 issue,写明问题时附上本页链接即可。

去提 issue →

本页目录