V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xboxv
V2EX  ›  问与答

mac 的 karabiner 改键软件 能以普通 的按键 作为修饰键吗?

  •  
  •   xboxv · 45 天前 · 1730 次点击
    这是一个创建于 45 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如 按下 d 的时候实现 jikl 分别映射为上下左右.
    https://karabiner-elements.pqrs.org/docs/manual/configuration/configure-complex-modifications/
    看这个官方文档 好像是可以实现. 如果是的话,那这很强大啊.


    windows 中 powerToys 中也能配置按键映射, 但是 只能 快捷键必须以修改键(ctrl win alt )开头.

    windows 中有什么解决方案吗?
    21 条回复    2025-04-06 03:47:16 +08:00
    zmxnv123
        1
    zmxnv123  
       45 天前
    autohotkey
    Moosems
        2
    Moosems  
       45 天前
    @zmxnv123 ahk 也不太好做到吧?
    ```
    d & k:: {
    Send "{Down}"
    }
    ```
    这种配置之后 这个 d 按键就废了, 没法正常使用了
    xell
        3
    xell  
       45 天前
    Karabiner 可以做到的,它确实很强大,例如参见 https://brettterpstra.com/2025/03/30/keybindings-home-row-redux/ ,这里用了分号 ; 作为修饰键与字母键 J/I/K/L 联用。

    至于 Windows 我就不清楚了。
    zmxnv123
        4
    zmxnv123  
       45 天前
    @Moosems 问下 chatgpt 应该有别的写法
    Moosems
        5
    Moosems  
       45 天前
    @xell 那你这样用分号的话, 分号还能单独使用吗?
    Moosems
        6
    Moosems  
       45 天前
    @zmxnv123 #4 没有解决方案, 这个问题我之前研究过, 还专门咸鱼找人写脚本, 都做不到.

    https://blog.csdn.net/fengyufuchen/article/details/146202077

    有人能做到 我 v50
    Moosems
        7
    Moosems  
       45 天前
    @xell 不得不感叹 mac 生态 确实 有非常多的 优秀 软件,我已经遇到好几个了, 而且都是 windows 的没有的.
    gpt5
        8
    gpt5  
       45 天前 via iPhone
    karabiner 完全可以实现
    Moosems
        9
    Moosems  
       45 天前
    @gpt5

    @xell
    我还有几个疑问:
    1.这样配置之后, 不会影响 d 按键的正常输入吧?

    正常 逻辑是 按下 d 之后再次按下 k 触发热键, d 和 k 的按下会存在延迟, 比如延迟 200ms, 那么是不是意味着 正常按下 d 之后, 如果想要得到正常的字符 d 输出, 肯定会延迟 200ms 后才会输出 d?

    2. 假设 我们是 f 和 n 触发 down, 如果我 打方法的拼音 "fangfa" 可能我的输入速度会很快,那么这个时候 会不会触发 f 和 n 的热键? 毕竟 fangfa 拼音里面 有 f 和 n.
    zmxnv123
        10
    zmxnv123  
       45 天前
    @Moosems

    问的 chatgpt ,windows 没开机,你试下呢

    ; 定义一个变量,追踪 k 键是否被按下
    k_down := false

    ; 追踪 k 键的按下与松开状态
    *k::
    k_down := true
    return

    *k up::
    k_down := false
    return

    ; d 键的逻辑判断
    *d::
    ; 等待一下看看是否 k 也被按下
    Sleep, 30
    if (k_down) {
    Send, {Down}
    } else {
    Send, d
    }
    return
    zmxnv123
        11
    zmxnv123  
       45 天前
    @zmxnv123

    > 来自 chatgpt
    说明:
    * 表示「无论是否按了其他修饰键(如 Shift 、Ctrl )」都触发。

    k_down 是一个布尔变量,用来判断 k 是否被按着。

    在 d 被按下时,稍微 Sleep 等待一下(比如 30ms ),看看 k 是否也正被按着。

    如果 k 正在按着,就发送 {Down},否则发送普通的 d 。

    可选优化:
    你可以把 Sleep 调整到 10~50 毫秒之间,看哪个延迟最合适,既能准确判断组合,又不影响打字体验。

    需要我帮你扩展更多组合键逻辑也可以说一声~
    Moosems
        12
    Moosems  
       45 天前
    @zmxnv123 #11 这个方案不行. 回头你可以试下, 有兴趣我们可以探讨下.
    xell
        13
    xell  
       45 天前
    分号 ; 当然可以单独使用,只是有个副作用,就是不能连发了(按着不动然后输出很多个分号),因为从原理上,按着不动的时候,触发的是作为修饰键的功能。不过你现在寻求的是 Windows 下面的解决方案,肯定是完全不同的机制。AutoHotkey 也很强大,我倒有点很吃惊它做不到——15 年前我用它来配合 Total Commander 实现 vim keybinding 的时候就领教过。或许你可以再跟 AI 探讨一下可能性。
    jheroy
        14
    jheroy  
       45 天前 via iPhone
    我用 karabiner 就是为了这个功能, 其它平台可以使用 kmonad ,这个是跨平台的,我在 Linux 可以实现 karabiner 一样的功能,Windows 应该也可以
    zq11211277
        15
    zq11211277  
       45 天前
    jheroy
        16
    jheroy  
       45 天前 via iPhone
    @Moosems
    @xell 可以实现;单独使用,并且不影响连发。karabiner 配置;+j 的快捷键是需要; down - j down - j up - ; up 这样的顺序才触发快捷键, 单独; down 然后马上就; up 了的话那么就直接输入了;, 如果一直; down 超过配置的延迟时间那么触发;的连续输入。 其实配置 karabiner 可以用一个工具 GokuRakuJoudo 这个要直观很多,karabiner 的配置比较冗长
    gpt5
        17
    gpt5  
       45 天前
    karabiner 有两种实现方法,
    1 是把 d 映射为:单独按是时 d ;与其它键组合时是一个修饰键(比如右 opt)。然后再映射那个修饰键+hjkl 为方向键
    2 是直接把 d+h 映射为左,d+j 直接映射为下,以此类推。
    两种方法都不会影响单独按。
    但有一定几率误触发,我就有很多字母+字母的快捷键组合,用了后才知道,其实我们打字的时候经常会有两个键一起按的情况,需要结合自己的习惯调节组合键位和判定时间。
    xboxv
        18
    xboxv  
    OP
       45 天前
    @zq11211277 这个工具很 nice, 感觉就像开了天眼一样. 基本上解决了问题,大有研究
    juggtt213
        20
    juggtt213  
       45 天前 via iPhone
    我之前也想过类似的,不过是 capslock 做修饰键,karabiner 这样弄修饰键其实会有个问题,就是连续输入的时候要等待一定的延迟,你如果是想用 vim 风格的按键,那应该会连按 dd 吧,这样其实有点影响

    mac 貌似自带全局 emacs 那种快捷键,如果只是上下的话,比如自动补全切换选中,直接 ctrl + n/p 就够用了
    iX8NEGGn
        21
    iX8NEGGn  
       44 天前
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3588 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:30 · PVG 18:30 · LAX 03:30 · JFK 06:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.