命令行工具
用 wind_input 命令行管理配置、方案、词库、短语与备份,可脚本化批量操作
清风输入法的主程序本身就是命令行工具:不带参数启动时是输入法服务,带子命令时执行一次操作后退出。适合脚本化配置、批量部署与故障排查。
可执行文件
| 文件 | 说明 |
|---|---|
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/on与false/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选项:
| 选项 | 用于 | 作用 |
|---|---|---|
--force | import | 同 id 已存在时覆盖(默认拒绝并提示) |
--id <主题id> | import | 指定落到哪个目录 id(默认用包里的主题名) |
--force | export | 输出路径已有文件时覆盖(默认拒绝并提示) |
几条值得知道的:
- 内置主题也导得出 —— 改了内置主题的配色想发给别人,不必先手工复制一遍目录
- 导入的若正是当前生效主题,会即时重新加载 —— 回执里会说明,不用重启
- 导出失败不会动落点上原有的文件 —— 先写临时文件、自检通过才就位
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-systemphrase import 没有替换模式,只有合并。要清空用户短语请用设置工具。
backup
完整备份与还原。需要服务在线。
| 命令 | 选项 |
|---|---|
backup create <文件.zip> | --stats(含统计)、--state(含界面状态) |
backup inspect <文件.zip> | —— |
backup restore <文件.zip> | --replace(缺省为合并)、--sections a,b,... |
可还原的域:config、dict、temp、freq、shadow、phrase、common_chars、charset、completion 0.122 新增、schemas、themes、state、stats。
⚠️ 其中 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,phraseinspect 会打印备份类型、创建时间、平台、版本与条目清单。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| 选项 | 默认 | 取值 |
|---|---|---|
--kind | info | info / success / error |
--color | 省略 | #RRGGBB 或 #RRGGBBAA,给了则压过 --kind(两者不能同时给) |
--pos | bottom_center | center / top / top_center / bottom_center / top_left / top_right / bottom_left / bottom_right |
--ms | 2500 | 显示毫秒数 |
提示只能由输入法主进程弹出,故本命令需要服务在线。短语里的等价写法是 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.wdictdev 变体(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 | 用法错误:参数缺失、未知子命令、不支持的参数形式 |
127 | wind_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设置工具是单实例的:已经开着时再执行一次,会激活已有窗口并切到目标页,不会开出第二个窗口。
直达词库的指定方案与类型 0.113 新增
--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,写明问题时附上本页链接即可。