候选注释
用模板配置候选词右侧灰字显示的内容——编码提示、带声调注音、拆字字根,横排与竖排可分别设置
候选注释是候选词右侧的那行灰字。默认显示编码提示(如五笔前缀候选的剩余编码),你可以把它 改成注音、拆字字根,或几种信息的组合。
这是进阶定制
默认配置已适合大多数人。本页面向的是想在候选窗里看到注音或字根的用户——尤其是形码方案 (打得出但不确定怎么读)与正在学习编码的用户。
设置位置:设置工具 →「外观」→ 候选窗口 →「候选注释」→ 设置。
快速上手
| 想要的效果 | 竖排注释填 |
|---|---|
| 只显示编码提示(默认) | ${code_hint|code} |
| 显示带声调注音 | ${pinyin} |
| 注音加括号 | {(${pinyin})} |
| 单字显示字根,词组显示注音 | {〔${chaizi}〕}{${pinyin}} |
| 编码 + 注音 | ${code_hint|code}{ (${pinyin})} |
| 悬停提示同款(字根 + 编码 + 读音) | {${chaizi}}{ [${chaizi_code}]}{ ${pinyin}} |
横排注释建议留 ${code_hint|code} 或干脆留空:横排候选窗的宽度由所有候选共享,放注音或
字根很容易把窗口撑得很宽。
变量
| 变量 | 内容 | 示例 |
|---|---|---|
${code_hint} | 引擎给出的编码提示:形码前缀候选的剩余编码、混输的来源标记 | kao、拼 |
${code} | 整词在主码表里的实际编码(仅拼音来源候选) | wqvb |
${pinyin} | 带声调注音 | nǐ hǎo |
${chaizi} | 拆字字根,仅单字候选 | 亻尔 |
${chaizi_code} | 该字在拆字库里的编码,仅单字候选 | wq |
${chaizi_all} | 拆字字根,不限字数(逐字拼接) | 亻尔 女子 |
${dict} | 挂载的注释词库里该词的注释 | apple、🍎 红苹果 |
${chaizi} 限单字是有意的:拆字回答的是「这个字由哪些字根构成」,词组的字根串既难读、
又会把候选行推得很宽。确实需要词组字根时用 ${chaizi_all}。
${code} 只对拼音来源的候选有值——形码方案下候选的编码就是你自己打的,再显示一遍是冗余。
变量参数
${chaizi_all} 支持用冒号指定逐字分隔符:
| 写法 | 结果 |
|---|---|
${chaizi_all} | 亻尔 女子 |
${chaizi_all:/} | 亻尔/女子 |
${chaizi_all: · } | 亻尔 · 女子 |
${chaizi_all:} | 亻尔女子 |
冒号后的内容原样使用,空格不会被忽略。
语法
${a|b} 取首个非空
按顺序取第一个有内容的变量。默认模板 ${code_hint|code} 的意思是:优先用引擎给的编码提示,
没有就退回主码表反查码。
{ … } 可选段
段内的变量全部为空时,整段(包括里面的括号、标签文字)一起消失。
这是配装饰字符的关键。对比:
| 模板 | 拼音有值 | 拼音为空 |
|---|---|---|
${code} (${pinyin}) | wqvb (nǐ hǎo) | wqvb () ← 空括号 |
${code}{ (${pinyin})} | wqvb (nǐ hǎo) | wqvb |
段内有多个变量时,只要有一个非空就保留整段,空的那个连同紧邻的一个空格一起省去:
{(拼: ${pinyin} ${chaizi})}
都有值 → (拼: nǐ hǎo 亻尔)
字根为空 → (拼: nǐ hǎo)
都为空 → (不显示)两条自动规则
- 空变量吞掉紧邻的一个空格,所以你可以放心用空格分隔变量,不必担心某个变量为空时留下 多余间距。
- 整个模板的变量全为空时不显示任何内容。所以
拼:${pinyin}在查不到读音时不会剩下一个 孤零零的拼:。
写错了会怎样
变量名拼错时会原样显示出来(如 ${pinyn}),这样你一眼就能看到是哪里写错了。
未闭合的 ${ 或 { 按普通文字处理,不会报错也不会崩溃。
关于注音的准确性
多音字的读音由词典决定,不是逐字取最常用读音:
- 拼音方案下,候选自带词条编码,
行长的编码是hang zhang,注音即háng zhǎng。 - 形码方案下,候选没有拼音编码,输入法会枚举各字读音、找出能在拼音词典里查回该词的
那个组合。
行长同样得到háng zhǎng而不是xíng cháng。
有一种情况无法自动判断:同音异调。「好」的 hǎo 和 hào 去掉声调都是 hao,而编码里
不含声调信息,此时显示最常用的那个读音。
注释词库
上面那些变量的内容都由输入法自己算出来。如果你想显示的是词典式的释义——英汉解释、
emoji 名称、字义、专业术语说明——就需要挂一份注释词库,再用 ${dict} 变量把它显示出来。
输入法不随附任何注释词库(词典内容多有版权),需要你自己准备文件。
词库格式
纯文本,与 Rime 词库同形态:可选的 YAML 头 + ... 分隔行 + 每行一条的制表符分隔正文。
name: en_cn
columns:
- text
- comment
...
apple n. 苹果
banana n. 香蕉columns声明各列含义,必须包含text与comment;省略columns时按[text, comment]处理。- 可选的第三列
code用于同词多义的消歧(见下)。声明了code列但某行没有编码时, 那一行写两列即可。 - 以
#开头的行是注释,空行忽略。 - 没有
...分隔行时,整个文件都当作正文(裸 TSV 也能直接用)。
挂载
把词库文件放进 schemas/comments/(你的用户数据目录下,没有就自己建),再在配置里增补
(可挂多个,数组顺序即优先级):
[[ui.comment_dicts]]
id = "en_cn"
label = "英汉词典"
path = "comments/en_cn.dict.yaml"
enabled = true
schemas = ["english"]
[[ui.comment_dicts]]
id = "emoji"
label = "Emoji 名称"
path = "comments/emoji.dict.yaml"| 字段 | 含义 |
|---|---|
id | 稳定标识,日志与设置页用来定位,不参与查询 |
label | 显示名 |
path | 相对 schemas/ 目录的路径;你自己目录下的同名文件优先于安装目录 |
enabled | 是否启用,省略视为启用 |
schemas | 限定生效的方案 id,留空 = 全部方案 |
schemas 用来避免无谓开销。一份十万条的英汉词典挂在五笔方案上,每次输入都要多查一次
注定查不到的表;写上 schemas = ["english"] 后,它在中文方案下根本不会被加载。
为什么放在 schemas 目录下
整机备份打包的是整个 schemas 目录,注释词库放在它下面就会
自动随备份走。换机器还原后不用再单独复制一遍词库文件。
配好后把 ${dict} 放进模板即可:
comment_template_vertical = "${dict}"
# 或与自动信息并列,优先显示词库释义、没有则退回注音
comment_template_vertical = "${dict|pinyin}"大小写
查询先按原样精确匹配,没有再依次试全小写、首字母大写、全大写。所以词库里写 apple
一条,输入 Apple / APPLE 时同样能查到;反过来词库里的大写缩写 ABC,输入 abc
也能查到。
精确匹配始终优先:词库里同时有 US(美国)和 us(我们)时,两者各显示各的,不会互相顶替。
这条回退只对含拉丁字母的词生效,中文词条不受影响。
同词多义的消歧
同一个词在不同方案下想显示不同注释时,用第三列 code 标注该条属于哪个编码:
columns:
- text
- comment
- code
...
行 háng 行列、行业 tfhh
行 xíng 行走、可以 tfhx查询时优先取编码精确匹配的那条;当前候选的编码对不上(比如拿拼音方案的编码去比对五笔码) 则回退到该词的第一条——跨方案共用一份词库是常态,不该因为编码对不上就什么都不显示。
性能与占用
词库首次加载时会被转成二进制缓存(.wcmt,与词库的 .wdat 放在同一个缓存目录下),之后
每次启动都是内存映射打开,常驻内存与词库大小基本无关,几十万条的大词典也不会让内存变大。
缓存按文件独立,加挂一个新词库不会让其他词库重建;同一个词库被多个方案引用时也只加载一份。
源文件改动后下次加载该词库时会自动重建(重启输入法,或在设置里改动挂载列表), 你不需要手动清理缓存文件。已经卸载的词库,其缓存也会被自动清掉。
分模式设置
高级功能,需手工编辑配置文件
本节的配置项没有图形界面,需要直接编辑 config.toml。
反查类的信息(注音、拆字、词典释义)在大多数时候是干扰,只在特定场景才想看到。 临时英文、临时拼音、网址输入、快捷输入、引导键特殊模式都可以有自己的注释模板, 进入该模式期间覆盖全局设置,退出自动恢复。
[input.temp_english]
comment_template_vertical = "${dict}"
comment_template_horizontal = "${dict}"
[input.temp_pinyin]
comment_template_vertical = "" # 临拼期间不显示任何注释
comment_template_horizontal = ""键名与全局的两个键完全一致,横排竖排也是各配各的。三种状态:
| 写法 | 含义 |
|---|---|
| 不写这个键 | 跟随全局设置(默认) |
| 写一个模板 | 本模式期间改用它 |
写空串 "" | 本模式期间不显示注释 |
「不写」和「写空串」是两回事:前者跟随全局,后者是明确要求不显示。
可用位置:
[input.temp_english] # 临时英文
[input.temp_pinyin] # 临时拼音
[input.url] # 网址输入
[[schema.mix_modes]] # 快捷输入等融合模式(每个实例独立)
[[schema.special_modes]] # 引导键特殊模式(每个实例独立)推荐用法:把词典释义只留给英文
如果你挂了英汉注释库,最好不要把 ${dict} 写进全局模板,而是只写进临时英文:
[ui.candidate]
comment_template_vertical = "${code_hint|code}" # 中文输入时只显示编码提示
[input.temp_english]
comment_template_vertical = "${dict}" # 打英文时才查词典这样中文输入时输入法根本不会去查注释词库——不是"查得快",而是压根不查。
长度控制
「注释最大字数」超出后截断并加省略号,0 表示不限。
候选窗不支持文字折行,注释过长时会被窗口右边缘裁掉,所以:
- 竖排每行独占一行,空间较宽裕,放注音或字根都合适;
- 横排所有候选共享一行宽度,注释稍长就会明显撑宽窗口。
这也是横排与竖排分开配置的原因。
完整示例
# 五笔用户:竖排看注音和字根,横排只留编码提示
comment_template_vertical = "{〔${chaizi}〕}{ ${pinyin}}"
comment_template_horizontal = "${code_hint}"
# 拼音用户:学五笔,竖排显示该词的五笔编码
comment_template_vertical = "{[${code}]}"
comment_template_horizontal = "${code_hint|code}"
# 悬停提示同款信息(字根 + 编码 + 读音),只对单字有完整效果
comment_template_vertical = "{${chaizi}}{ [${chaizi_code}]}{ ${pinyin}}"
comment_template_horizontal = ""
# 完全关闭注释
comment_template_vertical = ""
comment_template_horizontal = ""配置项参考
对应的配置键、取值范围与默认值见外观配置。