天天打字, 速度就是生命. 那么, 如何让键盘更好的服务自己呢?
第一, 你要盲打, 包括数字键和符号键; TODO: 练习. 推荐 keybr.com.
第二, 改造你的键盘. TODO: 看完本文, 配置自己的键盘.
如何改造键盘? 这里有几个参考方向:
- 换一个键盘布局, 比如 Dvorak;
- 去掉不常用的键, 换成更有用的键 (或者按键组合);
- 在不影响原来按键的情况下, 给它增加功能.
这里, 1 和 2 都是侵入式的, 使用它们来改造键盘, 动作太大, 需要花一些功夫适应. 我当年就用了暑假一个多月来练习 dvorak 的盲打. 作为一个 dvorak 死忠粉, 我仍然不建议你这样改造键盘, 尤其... 如果你是一个 devops, 需要经常使用其他人的电脑.
这里的 3 就是本文的重点.
(按键的表示, 举例: C-a
标识 Control+A, M-x
表示 Alt+X (或者 Option+X), ESCAPE
, RETURN
, SPACE
分别表示跳出符, 回车符, 和空格键. )
概念
首先介绍一些概念:
- /KeyDown/: 按下一个按键;
- /KeyUp/: 抬起一个按键;
- /Modifier Key/: 修饰键, 比如
shift
可以让a
变成A
,control
可以让c
变成一个能代表复制操作的键; - /Key Sequence/: 按键序列, 这里特指有组合效用的按键, 比如在一般的 shell 下
ESCAPE
a
这两个键等效于C-a
(回到行首)
这里 KeyDown 和 KeyUp 很重要. 虽然你不太会留意自己打字的时候按键是什么时候上屏, 但你应该知道是 key down, 或者 key up, 只能是其中一个时刻. 这是一个 "漏洞", 利用它可以用来扩展你的键盘.
"漏洞"
一个更明显的漏洞是很多 Modifier key 根本没有和其他键盘绑定. 那我们自己绑定它啊! 我把自己电脑上的 Fn+J, Fn+K, Fn+L... 绑定到了方向键左, 下, 和右... 这样一来, 我的 I/J/K/L/U/O
在和 Fn 一起按的时候, 就分别变成了 上, 左, 下, 右, HOME (回到行首), END (到行尾)
. 我们成功地扩充了自己的键盘, 而且还没有影响既有的配置.
另一个漏洞, 刚才已经提到, 是关于 key down 和 key up. 这里有一个概念叫 dual-role key, 指的是一个按键 (key) 有两个 role (功能/角色/职责). 两个 role 互不影响的套路是, 第一个 role 发生在 key up 的那一时刻, 第二个 role 发生在 key down 的过程中 (key up 之前). 所以, 我们只要让一个键 "上屏" 的时刻从 key down 挪到 key up. 就能在 down 之后, up 之前插入一个新的 functionality (功用).
Dual-role key 就是干这个的. 比如我的设置里, CAPS LOCK 键是一个 dual-role key, 在单独敲击这个键的时候 (key up), 它代表一个 ESCAPE 键 (根本没有啥切换大小写的场景, 所以我把它映射成了 ESCAPE 键); 在我按下这个键, 没有 key up 的时候, 如果按了其他的键, 这个 CAPS LOCK 又像是一个 control 键. 最终效果是, CAPS LOCK 变成了 ESCAPE 和 control 键的合体. 互不影响.
唯一的不足是, 单独按 CAPS 键, ESCAPE 只会在 key up 的时候上屏, 有些人会觉得有点延迟. (Tip: 打字要 swiftly, down & up 干脆点, 就不会觉得有延迟了)
所有的 modifier 键 (单独按没有啥作用) 都可以自己定制呢.
设置
具体不说了, Windows 上用 AutoHotkey 可以轻松实现; Linux 上用 xcape; macOS 上用 Karabiner.
当你有了这个概念, 怎么实现都只是 google 的问题.