作为一个 Emacser ,我会把包括 VSCode、 Clion 等开发工具的快捷键都设置成类 Emacs 的。其中有一个常用的快捷键 C-SPC ,用来设置选中区域的锚点。但这个快捷键被 Windows 自身的输入法快捷键占用 。 Windows 下 C-SPC 是用来切换中英文输入法的。这个快捷键无论如何都取消不掉,取消勾选点确定后又会回来,只能设置成其他键,但这种方法只对 Windows 自带的输入法有效,对我习惯使用的搜狗五笔输入法没用。尝试了不少办法都没效果,包括在 PowerToys 里把这个组合键映射成 Disable 。

最后还是用 AutoHotKey 工具解决了这个问题,编写 AutoHotKey 脚本在 Emacs/VSCode/Clion 下把 C-SPC 组合键拦截下来再转发给相应的程序。其中有一个坑,在 Emacs 中可能是由于转发太快导致锚点刚被 set 完就被取消了,最后通过设置时延解决了这个问题。

脚本如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#HotIf WinActive("ahk_exe emacs.exe")
^Space::{
    SetKeyDelay 75, 25
    ControlSend "^{Space}", , "ahk_exe emacs.exe"
}

#HotIf WinActive("ahk_exe code.exe")
^Space::ControlSend "^{Space}", , "ahk_exe code.exe"

#HotIf WinActive("ahk_exe clion64.exe")
^Space::ControlSend "^{Space}", , "ahk_exe clion64.exe"

效果如下: