分享个 windows 下模拟 macOS 键位的 autohotkey 脚本
工作经常在 windows 和 macOS 来回切,有一些按键习惯会对不上
比如:
- windows 切换窗口是 alt+tab,macOS 是 cmd+tab
- macOS 用
cmd+⬆️⬇️➡️⬅️可以导航输入光标,配合shift、backspace等可以按行导航、选中、删除,windows 下是home``end键
下面是我常用的 autoHotkey 脚本,用在 windows 上以模仿 macOS 的行为,每个人的需求各不相同,仅供参考
1. 基本文本导航能力
复制
; ==== 基本文本导航能力 ==== ; 1. Ctrl+左箭头 → Home(行首) ^Left::Send "{Home}" ; 2. Ctrl+右箭头 → End(行尾) ^Right::Send "{End}" ; 3. Alt+左箭头 → Ctrl+左箭头(单词跳转) !Left::Send "^{Left}" ; 4. Alt+右箭头 → Ctrl+右箭头(单词跳转) !Right::Send "^{Right}" ; ==== 带 Shift 的文本选择版本 ==== ; 5. Ctrl+Shift+左箭头 → Shift+Home(选中到行首) ^+Left::Send "+{Home}" ; 6. Ctrl+Shift+右箭头 → Shift+End(选中到行尾) ^+Right::Send "+{End}" ; 7. Alt+Shift+左箭头 → Ctrl+Shift+左箭头(选中左侧单词) !+Left::Send "^+{Left}" ; 8. Alt+Shift+右箭头 → Ctrl+Shift+右箭头(选中右侧单词) !+Right::Send "^+{Right}" ; ==== 补充的删除功能 ==== ; 9. Ctrl+Backspace → 删除整行 ^Backspace::Send "+{Home}{Delete}" ; 10. Alt+Backspace → 删除前一个单词 !Backspace::Send "^+{Left}{Delete}"
2. 将 alt+tab 切换窗口的能力赋予 ctrl+tab
复制
; ==== 将 alt+tab 切换窗口的能力赋予 ctrl+tab ==== ~Ctrl & Tab:: { ; 释放 Ctrl 键避免干扰 Send "{Ctrl Up}" ; 检查 Shift 键状态,已实现反向切换 if GetKeyState("Shift", "P") { ; 如果 Shift 被物理按下 Send "{Alt Down}{Shift Down}{Tab}" Send "{Shift Up}" } else { Send "{Alt Down}{Tab}" } return } ; 防止 Alt 被锁定 ~Ctrl Up:: { Send "{Alt Up}" return } ; ==== 通过 win 补充原有 ctrl+tab 切换标签页的功能 ==== ; 1. Win+Tab → Ctrl+Tab(标签切换) #Tab::Send "^{Tab}" ; 2. Win+Shift+Tab → Ctrl+Shift+Tab(反向标签切换) #+Tab::Send "^+{Tab}"
3. CapeLock键单击切换中英文、长按锁定大小写
注意:需修改切换中英文的热键,我这里是改成
Ctrl+F12
复制
#Requires AutoHotkey v2.0 Persistent() ; 初始化状态 isLongPress := false SetCapsLockState "AlwaysOff" ; 默认关闭大写锁定 ; 长按检测函数 longPressAction() { global isLongPress if (GetKeyState("CapsLock", "P")) { ; 如果仍按住 isLongPress := true SetCapsLockState !GetKeyState("CapsLock", "T") ; 立即切换大小写 } } ; 监听 CapsLock 按下事件 CapsLock:: { global isLongPress isLongPress := false SetTimer longPressAction, -300 ; 300ms 后检测长按(负数表示单次触发) KeyWait "CapsLock" ; 等待释放 SetTimer longPressAction, 0 ; 清除计时器 ; 单击行为(未触发长按时) if (!isLongPress) { Send "^^{F12}" ; 发送 Ctrl+F12 切换中英文 SetCapsLockState "Off" ; 强制关闭大写锁定 } } ; 保留 Shift+CapsLock 强制切换大小写 +CapsLock:: SetCapsLockState !GetKeyState("CapsLock", "T")
为什么不用 powerToys
实测按键代理时灵时不灵
缺陷
其实我还写了一个交换ctrl键和win键的脚本,但是经常抽风,这个暂时没有很好的解决办法,如果外接键盘支持修改键位,可以通过 via 进行修改:


op 太高产了