You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:39:51