Emacs 拥有大量默认快捷键绑定,不可避免地会与系统快捷键发生冲突,对于 Emacs 新手来说,如何解决这些冲突是一项重大挑战。
其中最常见的一个是命令 set-mark-command ,默认键绑定是C-SPC(Ctrl+Space) 1。在 Windows 系统中, Ctrl+Space 默认用于切换中英文输入法,这个冲突会导致在 Windows 下的 Emacs 无法使用 Ctrl+Space 进行标记设置。
要解决这个问题,可以选择使用 set-mark-command 的备用快捷键 C-@ ,或者禁用
Windows 的 Ctrl+Space 功能。此外,由于空格键左右手操作同样方便,还有“第三选择: 把 Ctrl+Space 一分为二,一侧的 Ctrl+Space 留给 Windows,另一侧释放出来供
Emacs 或其他应用程序使用。这正是我采用的方案,因为这样我就可以保留用两个大拇指操作的习惯。
在最新的 Windows 11 下可以这么做:
找到
Settings > Time & Language > Language & region > Options > Microsoft Pinyin > Keys, 取消勾选Ctrl + Space,保留勾选Shift。
打开 PowerToys (没有的话先安装), 在 Keyboard Manager 功能中,添加一个快捷键重映射:将
Ctrl(Left) + Space映射为Shift或者Win(Left) + Space。
此前的 Windows 版本存在一个 UI 无法更改相关设置的缺陷2,可以通过修改注册表解决:
- 找到
HKEY_CURRENT_USER\Control Panel\Input Method\Hot Keys\00000010条目, 将其中的Key Modifiers修改为02 80 00 00, 或者02 40 00 003。 - 如果希望将更改应用于所有新用户,还需要在
HKEY_USERS\.DEFAULT\Control Panel\Input Method\Hot Keys\00000010中进行同样的修改。
修改完成后,重启电脑即可生效。
似乎只有 Ctrl+Space 才能“劈开”, 其他的键天然的只对一只手来说顺手,比如Ctrl+a 就已经隐含着 Right Ctrl+a 。
脚注
Emacs 有独特的键位的缩写习惯,用
C-SPC代表Ctrl+Space。本文暂且保留常用习惯。 ↩︎https://superuser.com/questions/327479/ctrl-space-always-toggles-chinese-ime-windows-7 ↩︎
02 指Ctrl, 80 指左侧,40指右侧https://learn.microsoft.com/en-us/windows/win32/tsf/tf-mod--constants ↩︎