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

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

  •  
  •   xboxv · 4 天前 · 1228 次点击
    比如 按下 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  
       4 天前
    autohotkey
    Moosems
        2
    Moosems  
       4 天前
    @zmxnv123 ahk 也不太好做到吧?
    ```
    d & k:: {
    Send "{Down}"
    }
    ```
    这种配置之后 这个 d 按键就废了, 没法正常使用了
    xell
        3
    xell  
       4 天前
    Karabiner 可以做到的,它确实很强大,例如参见 https://brettterpstra.com/2025/03/30/keybindings-home-row-redux/ ,这里用了分号 ; 作为修饰键与字母键 J/I/K/L 联用。

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

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

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

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

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

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

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

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

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

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