进阶专题配置文件

按键配置

keys 域全部配置项——中英切换、候选选择与翻页、以词定字、按键功能表、功能快捷键、全局热键

v0.116.0

高级主题

普通用户在设置工具的"快捷键"页即可完成全部按键设置,修改即时生效。本页面向手动编辑 config.toml 的用户,逐项列出 [keys] 域的类型、可选值与默认值。

[keys] 域收纳输入法的全部按键绑定:中英切换键、引擎切换与状态切换快捷键、候选选择/翻页/高亮/以词定字键组、功能快捷键,以及全局热键。该域是扁平结构——除无效按键策略下沉到 [keys.overflow] 一层子表外,其余字段都直接挂在 [keys] 下。

字段分两类:

  • 热键字符串(如 switch_engine):单个组合键,格式见下方"热键字符串格式"。
  • 键组数组(如 page_keys):值不是键名而是键组常量(一个常量代表一对物理按键),可多选、以数组给出。每个这类字段下方都附一张"可选值 → 物理按键"对照表。

热键字符串格式

热键字符串由修饰键 + + + 主键组成,大小写不敏感、可含空格。

  • 修饰键:ctrl(= control)、shiftaltwin(= super)。
  • 主键:字母 az;数字 09;功能键 f1f12space / enter / tab / esc / backspace / delete / home / end / pageup / pagedown / 方向键 up/down/left/right;标点符号可用符号本身或英文名,如 .(= period)、,(= comma)、;(= semicolon)、'(= quote)、/(= slash)、\(= backslash)、[(= lbracket)、](= rbracket)、-(= minus)、=(= equal)、`(= grave)。
  • 空串或 none 表示不绑定该功能。
  • 只允许一个主键;写多个主键会被判为无效并忽略。

TOML 里的反斜杠

toggle_toolbar 默认值含反斜杠,在 TOML 中需用单引号字符串写成 'ctrl+shift+\',否则双引号里的 \ 会被当作转义符。

中英切换

[keys]
toggle_mode_keys = ["lshift", "rshift"]  # 中英切换键(键松开时触发)
commit_on_switch = true                  # 切到英文时是否上屏未完成的组合
类型可选值默认说明
toggle_mode_keys字符串数组lshift / rshift / lctrl / rctrl / capslock["lshift", "rshift"]单击并松开这些修饰键即切换中/英文模式。可多选,空数组=禁用点击切换
commit_on_switch布尔true / falsetrue从中文切到英文时若有未上屏的组合:true=上屏原始编码,false=直接丢弃

toggle_mode_keys 可选值对照:

可选值物理按键
lshift左 Shift
rshift右 Shift
lctrl左 Ctrl
rctrl右 Ctrl
capslockCaps Lock

状态切换快捷键

[keys]
switch_engine = "ctrl+shift+e"    # 循环切换输入方案
toggle_full_width = "shift+space" # 全角/半角切换
toggle_punct = "ctrl+."           # 中文/英文标点切换
toggle_s2t = "ctrl+shift+j"       # 简体/繁体输出切换
类型默认说明
switch_engine热键字符串ctrl+shift+e[schema].available 列表内循环切换当前方案
toggle_full_width热键字符串shift+space切换全角/半角字符输出
toggle_punct热键字符串ctrl+.切换中文/英文标点(仅中文模式下生效)
toggle_s2t热键字符串ctrl+shift+j切换简体/繁体输出(仅中文模式下生效)
schema_hotkeys表(方案 id → 热键字符串){}方案直达热键,见下

方案直达热键

switch_engine 是循环切换,方案多了就要按好几次。schema_hotkeys 给单个方案绑一个键,按下直接切过去:

[keys]
schema_hotkeys = { english = "ctrl+shift+n", wubi86 = "ctrl+shift+w" }

key 是方案 id(与 [schema].available 里的写法一致),value 是热键字符串。设置工具里的位置:方案 → 输入方案 → 选中方案 → 设置 → 按键设置 → 切换热键

行为与 switch_engine 完全一致——同样遵循「切换时是否上屏」,同样把选择持久化到 schema.active两种模式下都生效,这一点和其它中文态专属的快捷键不同:切到英文方案之后,还得能按键切回来。

指向不存在或未启用方案的条目会被安静忽略,不影响其它绑定;目标方案正在后台预热时提示「准备中…」并保持当前方案不变。

与临时模式的区别

key_actionsspecial: / mix: / temp_pinyin 那批动词进的是临时模式——打完一段自动退回原方案。schema_hotkeystoggle_schema:换方案,不再按一次不会回来。要「临时打几个字符就回来」用前者,要「切过去待一会儿」用后者。

按键功能表(key_actions)0.115 新增

上面那批热键是「一个功能一个字段」。key_actions 是通用的「键 → 干什么」表:左边任意键名,右边一个动词。引导键、临时模式入口、方案往返键都统一住在这里。

[keys.key_actions]
backslash = "special:quick_symbols"       # \ 进快符
backtick = "temp_pinyin"                  # ` 进临时拼音
semicolon = "mix:quick_mix"               # ; 进快捷输入
"ctrl+shift+u" = "special:quick_symbols"  # 快符的直达热键
rshift = "toggle_schema:english"          # 轻敲右 Shift 切英文方案,再敲回来

动词值域:

动词含义
temp_pinyin / temp_english进临时拼音 / 临时英文
mix:<实例id>进指定融合模式(mix:quick_mix = 内置快捷输入
special:<方案id>进指定引导键特殊模式——方案须已声明 [overlay]
toggle_schema:<方案id>切到指定方案,再按一次回到来源(往返,不要求目标方案配对称的绑定)
toggle_modeswitch_enginetoggle_puncttoggle_s2ttoggle_full_widthtoggle_toolbaropen_settingstake_screenshot与同名快捷键完全一样的状态切换
none显式什么都不做,用于在方案级覆盖里关掉某个全局绑定

写错的动词会被整条丢弃并在日志里告警,不会静默变成别的功能。

键的形态决定走哪条通路

同一张表里的条目按键的形态自动分流,不由动词决定,也不需要你指定:

键的形态通路为什么
组合键(ctrl+shift+u热键不与输入争键,可全局拦截
纯修饰键(rshiftlctrl松开时的轻敲判定按下时不能吃——宿主还要看到这个修饰键
单个有字符的键(backslash;引导键链排在中英文分水岭之后,英文模式下照常出字符

切方案 / 切中英文只能绑修饰键

toggle_modeswitch_enginetoggle_schema:* 这三类只接受修饰键,绑到有字符的键上会被拒绝。

理由是单程票问题:有字符的键走引导键链,而那条链在英文模式分水岭之后、英文态根本到不了。用 \ 切去英文方案之后,\ 就只会打出反斜杠,再也切不回来。这三个动词恰恰是「从英文态出来」的手段,所以必须绑在英文态也能生效的修饰键上。

方案级覆盖

方案文件(或 schema_overrides\<方案ID>.toml)也能写一份 [key_actions],只在该方案作当前方案时生效,逐键覆盖全局那份:

# wubi86.schema.toml
[key_actions]
z = "temp_pinyin"       # 五笔里借 z 打拼音
backslash = "none"      # 本方案关掉全局配的 \ 引导键

字母键只能按方案配,不能写进全局表:字母天然是编码键,能不能借用取决于这张码表里它是不是死码。全局表里配字母就成了无条件抢键,那个字母在所有方案里都打不出编码了。

要在某个方案里关掉一个全局绑定,写显式的 "none"。覆盖是深合并,只能新增或改写——从覆盖文件里删掉一行是删不掉全局那条的。

字母键让位给编码,所以别用 z 进特殊模式

绑了功能的字母键,若在当前码表里是活码(这个字母开头有真实编码或短语),按下时会让位给正常输入,不进模式。这是刻意的:编码优先。

z 尤其要注意——出厂词库自带 37 条 zz 开头的标点短语(zzbdzzsz 等),所以在任何方案里 z 都是活码,按下去总是先当编码。

之后能被捞回来的只有三个动词:temp_pinyintemp_englishmix:<id>。继续打出该码表里查不到的编码时(如 znihao),输入法会把 z 夺回来转交模式,而 zzbd 这类真实短语照常工作。

special:<方案id> 没有这条回捞通路——特殊模式的码表是作者设计的短码,去掉 z 之后的残余多半查不到,且它常开「进入即展示候选」,价值恰恰在按下那一刻。所以特殊模式请用 \` 这类在码表里不产出编码的符号键。

功能快捷键

[keys]
toggle_toolbar = 'ctrl+shift+\'       # 显示/隐藏工具栏
open_settings = "ctrl+shift+]"        # 打开设置工具
add_word = "ctrl+equal"               # 就地加词(从当前组合造词)
open_add_word_dialog = "ctrl+shift+equal" # 打开加词小窗
activate_ime = "ctrl+shift+["         # 切换到本输入法(系统级)
类型默认说明
toggle_toolbar热键字符串ctrl+shift+\显示/隐藏常驻工具栏
open_settings热键字符串ctrl+shift+]打开设置工具窗口
add_word热键字符串ctrl+equal就地加词,仅中文模式生效。该键额外走系统级全局拦截,规避 QQNT / Tabby 等宿主的加速键双处理
open_add_word_dialog热键字符串ctrl+shift+equal打开独立加词小窗,仅中文模式生效,同样走全局拦截
activate_ime热键字符串ctrl+shift+[切换到本输入法。经 Windows DirectSwitchHotkeys 注册表交由系统 ctfmon 原生处理(per-app 切换),不经引擎按键分发

take_screenshot(隐藏字段)

keys.take_screenshot(默认 ctrl+shift+f11)是有效但未在设置界面暴露的字段,也不写入随程序分发的 data\config.toml——它只有代码默认值。按下时触发截图(trigger_screenshot),并可作为全局热键动作。需自定义时只能手动写入 config.toml

[keys]
take_screenshot = "ctrl+shift+f11"  # 隐藏字段,设置界面无对应项

候选置顶与删除

[keys]
pin_candidate = "ctrl+number"           # 置顶候选(Ctrl+数字)
delete_candidate = "ctrl+shift+number"  # 删除候选(Ctrl+Shift+数字)
类型可选值默认说明
pin_candidate热键字符串(模板)ctrl+number / ctrl+shift+numberctrl+number对当前页第 N 个候选执行置顶。number 占位符展开为数字键 0–9
delete_candidate热键字符串(模板)ctrl+number / ctrl+shift+numberctrl+shift+number对当前页第 N 个候选执行删词。number 占位符展开为数字键 0–9

这两项只认固定模板

pin_candidate / delete_candidate 只识别 ctrl+numberctrl+shift+number 两种写法(number 代表数字键组);填其它值会被判为无效并忽略,等同于不绑定。

候选选择键组

[keys]
select_key_groups = ["semicolon_quote"]  # 次选/三选键组
类型可选值默认说明
select_key_groups字符串数组semicolon_quote / comma_period / lrshift / lrctrl["semicolon_quote"]除数字键外的候选快捷选择键组:每组第 1 键选第 2 个候选、第 2 键选第 3 个候选。可多选,空数组=仅用数字键选词

select_key_groups 可选值对照:

可选值第 2 候选键第 3 候选键
semicolon_quote;'
comma_period,.
lrshift左 Shift右 Shift
lrctrl左 Ctrl右 Ctrl

修饰键组(lrshift / lrctrl)在松开时才选词,且只认「轻敲」——按住超过 500 毫秒、 或按下期间碰了别的键,都不算选词。这样 Ctrl+AShift+字母 这类组合才不会被误判成选候选。

如果同一个键同时配成了中英文切换键(toggle_mode_keys),裁决是:有候选时选词, 无候选时切中英文;候选数量不足以命中该位次时吞掉该键,既不上屏也不切换 (修饰键没有对应字符,故不套用 [keys.overflow] 的策略)。

翻页与高亮导航

[keys]
page_keys = ["pageupdown", "minus_equal"]  # 候选翻页键组
highlight_keys = ["arrows", "tab"]         # 候选高亮移动键组
类型可选值默认说明
page_keys字符串数组pageupdown / minus_equal / brackets / comma_period / shift_tab["pageupdown", "minus_equal"]候选窗上一页/下一页键组,可多选
highlight_keys字符串数组arrows / tab["arrows", "tab"]候选高亮上移/下移键组,可多选

page_keys 可选值对照:

可选值上一页下一页
pageupdownPageUpPageDown
minus_equal-=
brackets[]
comma_period,.
shift_tabShift+TabTab

highlight_keys 可选值对照:

可选值上移下移
arrows
tabShift+TabTab

以词定字

[keys]
select_char_keys = []  # 以词定字键组,默认禁用
类型可选值默认说明
select_char_keys字符串数组comma_period / minus_equal / brackets[]用成对标点键从当前高亮候选词中逐字上屏:第 1 键取第 1 字、第 2 键取第 2 字。空数组=禁用。词长不足时按 [keys.overflow].select_char_key 策略处理

select_char_keys 可选值对照:

可选值取第 1 字取第 2 字
comma_period,.
minus_equal-=
brackets[]

全局热键

[keys]
global_hotkeys = []  # 提升为系统级全局热键的动作名列表
类型默认说明
global_hotkeys字符串数组[]列出的动作名将经 Win32 RegisterHotKey 注册为系统级热键,使其在任意应用中生效。填的是动作名而非键值,键值仍取各功能字段自身的绑定

global_hotkeys 支持的动作名:

动作名对应功能
switch_engine切换方案
toggle_full_width全/半角切换
toggle_punct中/英标点切换
toggle_toolbar显示/隐藏工具栏
open_settings打开设置
take_screenshot截图
toggle_s2t简/繁切换

不支持的动作会被忽略

只有上表 7 个动作可放进 global_hotkeys;填写其它名字(含 add_word / activate_ime 等)会被判为不支持并忽略。其中 activate_ime 另有专属系统级通道(DirectSwitchHotkeys 注册表),无需也不能列在此处;add_word 需要当前组合上下文,不参与全局注册。

无效按键策略(keys.overflow)

当按下选择/翻页/以词定字类按键,但候选数量或词长不足以命中目标位次时的处理方式。三项共用同一套枚举。

[keys.overflow]
number_key = "ignore"       # 数字键超出当前页候选数量时
select_key = "ignore"       # 次选/三选键候选不足时
select_char_key = "ignore"  # 以词定字键候选词长度不足时
类型可选值默认说明
number_key枚举ignore / commit / commit_and_inputignore数字键位次超出当前页候选数量时的行为
select_key枚举ignore / commit / commit_and_inputignore次选/三选键(见 select_key_groups)候选不足时的行为
select_char_key枚举ignore / commit / commit_and_inputignore以词定字键(见 select_char_keys)候选词长度不足时的行为

枚举取值行为:

取值行为
ignore吞掉该键,不做任何操作(默认)
commit上屏当前高亮的候选
commit_and_input上屏当前高亮候选,并把该按键对应的字符追加输入

相关阅读

本页目录