因为用mac的快捷键实在太爽,所以换windows的时候花了很多时间设置快捷键。
最突出的差别就是ctrl,command,和alt这三个键。这个相对好处理,用微软的powertoys交换ctrl和alt物理键映射就能解决不少差异。
这里有第一个坑:powertoys在设置输入的时候是读物理键,而不是powertoys映射后的键,但在powertoys运行的时候,他的快捷键是先读映射后的键。
整个逻辑是这样的:物理键输入->(设置的时候读这里)->powertoys映射物理键->powertoys映射快捷键->windows读输入或快捷方式。
比如说,我首先映射了alt->ctrl和ctrl->alt,那么会导致输入alt+A变成了ctrl+A(通常是选择全部文本的快捷键),那么我日常按alt+A就可以完成这个工作了。
但是,假如这时候我想设置一个alt+B的快捷键,我在powertoys设置的时候不能按(物理)alt+B,而应该按ctrl+B。
但ctrl在两个系统的差别不止是位置。mac和windows的快捷键逻辑不是完全相反的,也有重合的部分。如果只是交换键位映射,还会让原本重合的部分相反。
这就带来了第二个坑:powertoys映射物理键是只发生在powertoys映射快捷键之前的,而设置时读输入又发生在映射物理键之前。换句话说,假如我想映射物理Alt+B = 原本的Alt+B,那写在powertoys的设置中的就是alt+B = alt+B。然后powertoys就会拒绝你的设置,因为映射前后不能相同。
我现在没有找到比较好的方法来处理这个问题。主要是中午没吃饱太饿了不想继续研究了。
然后就是第三个坑:powertoys的快捷键映射似乎只针对某个接口的快捷键。如果应用用的是这个接口,那就皆大欢喜,但如果不是,就会出各种各样的问题。
这篇文章的起因就是这个坑。我在设置obsidian的时候发现obsidian在读shortcut发生在映射物理键之后、映射快捷键之前。换句话说对obsidian的快捷键来说powertoys的快捷键屁用没有。
我没有第一时间发现这一点的原因是,obsidian读普通输入是发生在映射快捷方式之后的。
物理键输入->powertoys映射物理键->obsidian读快捷键->powertoys映射快捷键->obsidian读输入。
但这还不是让我花最多时间的坑。
我习惯用(windows的)ctrl+S/D来切换标签页。这是我最常用的快捷键之一。在用powertoys交换alt和ctrl后就应该是Alt+S。但不论是obsidan还是chrome都完全读不到Alt+S/D。我花了很多时间来处理这个bug。
有一个很有趣的事件:当我在powertoys中设置了Alt+S的快捷键映射之后,obsidian会把alt+S读成Alt+key255。我一开始以为可以利用这个bug来完成我的目的,结果发现我映射完Alt+S和D之后,obsidian会把这两个快捷键都读成Alt+key255。
我的结论是:windows的Alt+S/D作为快捷键的概念被某种神秘力量所攫取,所有应用程序都读不到这个快捷键(但作为输入是能读到的,比如carnac)。powertoys有能力将这个快捷键夺回来,但没有能力让这个快捷键中的S/D获得它原本的身份。而其他应用连夺回来都做不到。
这个对我来说很难受。但没办法,只能曲线救国。
于是我想试一试win+S/D快捷键,结果类似地,powertoys的快捷键在高贵的win系列快捷键面前毫无地位可言。与obsidian情况略有不同的是,其他应用程序根本读不到win的快捷键。
即:powertoys设置时的读取>powertoys物理键映射>win快捷键>obsidian读取>powertoys快捷键映射。
其实也有操作注册表来完成这些工作的方法,但我因为搜到了以下内容所以就没尝试。
经过研究,windows热键分三类:
1:系统绑定的,优先级最高,比如win+L,ctrl alt del之类,无法被注册表和组策略禁用;
2:资源管理器绑定的,在结束explorer进程后就释放了,比如我想把everything绑定到win+s,正常情况下是不行的,因为一按win+s就会弹出系统搜索,这时候把explorer关了就能绑定上了;
3:win8后新增的快捷键,为啥单独拿出来说呢,因为突出一个没规律。一部分旧键新功能(如win+f)和原来功能相似的(如win+s)和第二类一样,优先级也是explorer级别;另一部分完全新增的,优先级就跟第一类一样,但是展现微软能力的时刻来了,这些快捷键在被禁用相关功能的情况下(比如禁用了cortana)这些快捷键仍然被占用没有被释放出来(占茅坑不拉屎是吧)。 相比原先经典的第一二类快捷键,win8后新增的第三类快捷键突出一个数量巨多,而且毫无卵用,甚至在你禁用相关功能的情况下,仍然会“占茅坑不拉屎”,这类快捷键级别很高,意味着你不能用注册表去禁用它。 在我看来,win8之后,特别是win10新增的快捷键突出一个毫无逻辑,充满了恶意推广、整天刷存在感的铜臭味,同时一股脑的写进系统不能修改的懒狗做法,很符合现在微软的人设
我猜alt+S/D类似地,曾经被系统保留,但后来被删掉了,但系统占着茅坑不拉屎,导致我还是不能用。
我最后只能退而求其次,用alt+X/C来代替了alt+S/D。
这与我在mac用hammerspoon轻松爆改快捷键形成了鲜明对比……
总结:windows除了打游戏、office套件以外真的到处都很难用。