现在要来折腾键盘了。
我在某篇 Emacs 教程里面看到有人吐槽 Caps Lock 平时没什么用,被这独特的观点惊讶了一下,然后仔细一想还真是:长篇的大写字母很少会需要打,而单词的大写字母一般都会使用 Shift 去打,总的来看 Caps lock 确实没有什么是高频使用的,还占着最好碰到的位置。
于是就怎么再利用这个没什么用的按键,我开始倒腾键盘。
思路
Caps lock 虽然很冷门,但是 把思路逆转过来吧,这会成为它的优势:在Alt 键成为快捷键冲突重灾区,是个程序就注册一大坨,而 windows 键又被微软系占领得满满当当注销不了,ctrl 键更是成了各种程序心头好的时候,Caps lock 的存在如同一片净土,不论是单按还是组合键,Caps lock 都不会冲突。
但也只是想想,实际上 Caps lock 因为不是特殊键而导致拿去打组合键的结果是不会被拦截,比如说 Caps lock + l 打出的话,l 是真的会被打出来的,并不能像 alt + l 那样拦截住。
不过天无绝人之路,正如通往新大陆的人们不是游泳过去而是造了艘船开过去一样,在我研究下,通过大名鼎鼎的 AutoHotKey 也就是 AHK 可以让 Caps lock 变成能成为组合键一样的存在。
键位设置
既然手握新的神键 Caps lock,当然是设置一些常用但是又很尴尬的按键来改变游戏规则!
我做的第一件事就是把 Caps lock 单击映射成了 ctrl space ——没错,一键切换输入法。虽然肌肉记忆来说按两个键已经不成什么问题了,但是对我来说 ctrl 按多了手指头还是会酸的。
接着便是组合键。
平时经常在必要时候按不到 home / end?所以我把 caps + a 和 caps + e 映射成了 home 和 end
平时找小箭头很麻烦,笔记本用半截上下箭头?我把 caps + h/j/k/l 映射成了 左下上右 箭头。
可能有人察觉到了,你这键位怎么有股味?——没错,我就是参考了 emacs 和 vim 的键位去弄了一个,下面是 AutoHotKey 的脚本。
vimacows.ahs
#Requires AutoHotkey v2.0
#SingleInstance Force
A_MenuMaskKey := "vkE8" ; 防止 Alt 菜单干扰
; 1. 彻底死死拦截物理 CapsLock 的按下事件,不向系统和 Rime 透露半点风声
SetCapsLockState "AlwaysOff"
*CapsLock::Return
; 2. 在物理 CapsLock 释放时进行判定
*CapsLock Up:: {
; 如果按住期间没有触发过任何其他按键(说明是纯粹的短按)
if (A_PriorKey = "CapsLock") {
Send "^{Space}" ; 向系统发送 Ctrl + Space,由 Rime 精准接盘切换中英
}
}
; ==============================================================================
; 【终极导航层】
; * 前缀表示通配任意修饰键(Ctrl/Shift/Alt)
; {Blind} 表示发送按键时,不要释放当前已经按下的修饰键,原封不动传过去
; ==============================================================================
#HotIf GetKeyState("CapsLock", "P")
*a::Send "{Blind}{Home}"
*e::Send "{Blind}{End}"
*s::Send "{Blind}{Insert}"
*h::Send "{Blind}{Left}"
*j::Send "{Blind}{Down}"
*k::Send "{Blind}{Up}"
*l::Send "{Blind}{Right}"
#HotIf结尾
懒得写尾巴了,一套折腾下来感觉还挺爽的,虽然 home / end 这两个功能还是没怎么用,但是左右箭头简直能帮上大忙,现在两只手基本上都可以在 26 字母上了,而不是去翻我的小箭头。