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

2025 年 4 月 5 日
 xboxv
比如 按下 d 的时候实现 jikl 分别映射为上下左右.
https://karabiner-elements.pqrs.org/docs/manual/configuration/configure-complex-modifications/
看这个官方文档 好像是可以实现. 如果是的话,那这很强大啊.


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

windows 中有什么解决方案吗?
3210 次点击
所在节点    问与答
21 条回复
xe2vherd
2025 年 4 月 5 日
autohotkey
Moosems
2025 年 4 月 5 日
@zmxnv123 ahk 也不太好做到吧?
```
d & k:: {
Send "{Down}"
}
```
这种配置之后 这个 d 按键就废了, 没法正常使用了
xell
2025 年 4 月 5 日
Karabiner 可以做到的,它确实很强大,例如参见 https://brettterpstra.com/2025/03/30/keybindings-home-row-redux/ ,这里用了分号 ; 作为修饰键与字母键 J/I/K/L 联用。

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

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

有人能做到 我 v50
Moosems
2025 年 4 月 5 日
@xell 不得不感叹 mac 生态 确实 有非常多的 优秀 软件,我已经遇到好几个了, 而且都是 windows 的没有的.
gpt5
2025 年 4 月 5 日
karabiner 完全可以实现
Moosems
2025 年 4 月 5 日
@gpt5

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

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

2. 假设 我们是 f 和 n 触发 down, 如果我 打方法的拼音 "fangfa" 可能我的输入速度会很快,那么这个时候 会不会触发 f 和 n 的热键? 毕竟 fangfa 拼音里面 有 f 和 n.
xe2vherd
2025 年 4 月 5 日
@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
xe2vherd
2025 年 4 月 5 日
@zmxnv123

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

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

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

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

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

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

mac 貌似自带全局 emacs 那种快捷键,如果只是上下的话,比如自动补全切换选中,直接 ctrl + n/p 就够用了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/1123355

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX