ZMK键盘配置:hold-trigger-key-positions与单手双修饰键兼容方案咨询
ZMK 主键行修饰键配置优化方案
问题分析
当前配置通过hold-trigger-key-positions实现了「仅按压另一侧按键时触发修饰键」的单键需求,但当单手同时按住两个同侧主键行修饰键,再按压另一侧功能键时,仅一个修饰键被识别为按住状态,另一个被判定为点击。核心原因是balanced风味下,未在tapping-term-ms窗口内检测到触发键的修饰键会自动触发点击,而同时按住的同侧修饰键不在彼此的hold-trigger-key-positions列表中,无法互相触发hold状态。
可行配置方案
方案1:切换Hold-Tap风味为hold-on-other-key-down
该风味的逻辑是:当任何在hold-trigger-key-positions列表中的按键被按下时,立即触发hold动作,无需等待tapping-term-ms结束。既保留了「仅另一侧按键触发修饰键」的核心需求,又能在同侧多修饰键+另一侧功能键的场景下,让所有同侧修饰键在功能键按下时立即切换为hold状态。
修改后的行为配置:
behaviors { lhm: left_homerow_mods { compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>; tapping-term-ms = <200>; quick-tap-ms = <0>; flavor = "hold-on-other-key-down"; // 替换为该风味 bindings = <&kp>, <&kp>; hold-trigger-key-positions = <6 7 8 9 10 11 18 19 20 21 22 23 30 31 32 33 34 35 36 37 38 39 40 41>; }; rhm: right_homerow_mods { compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>; tapping-term-ms = <200>; quick-tap-ms = <0>; flavor = "hold-on-other-key-down"; // 替换为该风味 bindings = <&kp>, <&kp>; hold-trigger-key-positions = <0 1 2 3 4 5 12 13 14 15 16 17 24 25 26 27 28 29 36 37 38 39 40 41>; }; };
方案2:扩展hold-trigger-key-positions包含同侧主键行键
将同侧其他主键行键的位置加入hold-trigger-key-positions列表,让同侧多修饰键互相触发hold状态:
- 单按同侧修饰键:无其他触发键,仍触发点击动作;
- 同时按两个同侧修饰键:互相触发hold状态,再按另一侧功能键时,两个修饰键均生效;
- 按单个同侧修饰键+另一侧功能键:正常触发修饰键。
修改后的行为配置:
behaviors { lhm: left_homerow_mods { compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>; tapping-term-ms = <200>; quick-tap-ms = <0>; flavor = "balanced"; bindings = <&kp>, <&kp>; // 新增左侧主键行键位置,与原有右侧键位置合并 hold-trigger-key-positions = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41>; }; rhm: right_homerow_mods { compatible = "zmk,behavior-hold-tap"; #binding-cells = <2>; tapping-term-ms = <200>; quick-tap-ms = <0>; flavor = "balanced"; bindings = <&kp>, <&kp>; // 新增右侧主键行键位置,与原有左侧键位置合并 hold-trigger-key-positions = <0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41>; }; };
方案选择建议
- 若希望严格保留「只有另一侧按键能触发修饰键」的逻辑,优先选择方案1;
- 若允许同侧多修饰键互相触发hold(无需依赖另一侧按键),可选择方案2。
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

