修改标准键盘布局以便适应自己的workload

2025年1月1日

2010年我使用了半年以上的德沃夏克Dvorak键盘布局。当时测试了快蹄qwerty布局和Dvorak的打字速度,发现训练半年后Dvorak的速度还是qwerty的三分之二。

主要原因有三:

1. Dvorak的按键操作精密,手背的筋有抽筋的感觉。
2. 非标准布局的支持问题:学校电脑、公司电脑、手机不一定都能更改键盘布局。有人用我的电脑或帮我写代码时有问题。
3. 破坏了很多快捷键的设计。包括游戏、Vim、Windows自带快捷键等。

我们绝大多数人都是用标准qwerty布局,所以我们最好从这个标准布局按自己的workload修改。

Sample Workload

git clone https://gitlab.com/gqq-my-master/character-frequencies。在这个Python脚本,你可以设置一个文件夹,脚本会读取该文件夹和子文件夹里的指定文件(fileInclusionPatterns),统计alphabet frequencies。如果统计代码文件夹,该脚本还可以跳过代码文件开头的preamble,比如版权说明。

我的话我统计了我写的英文文档和代码文件。

character latex frequency C++ frequency weighted frequency
‘space’ 11.50 15.36 14.07
‘_’ 0.10 2.27 1.55
‘-‘ 0.39 0.48 0.45
‘,’ 0.82 1.09 1.00
‘;’ 0.13 1.15 0.81
‘:’ 0.13 0.45 0.34
‘!’ 0.01 0.09 0.06
‘?’ 0.01 0.02 0.02
‘.’ 3.11 0.63 1.46
”’ 0.08 0.12 0.11
‘”‘ 0.02 0.38 0.26
‘(‘ 0.39 1.47 1.11
‘)’ 0.39 1.47 1.11
‘[‘ 0.27 0.09 0.15
‘]’ 0.27 0.09 0.15
‘{‘ 1.39 0.30 0.66
‘}’ 1.38 0.30 0.66
‘@’ 0.02 0.05 0.04
‘*’ 0.03 0.89 0.60
‘/’ 0.06 0.59 0.41
‘\’ 2.01 0.14 0.76
‘&’ 0.07 0.21 0.16
‘#’ 0.02 0.15 0.11
0.33 0.04 0.14
‘`’ 0.04 0.00 0.01
‘^’ 0.01 0.01 0.01
‘+’ 0.03 0.14 0.10
‘<‘ 0.05 0.12 0.10
‘=’ 0.35 0.63 0.54
‘>’ 0.07 0.37 0.27
‘|’ 0.02 0.08 0.06
‘~’ 0.09 0.01 0.04
‘$’ 0.30 0.00 0.10
‘0’ 0.80 0.43 0.55
‘1’ 2.00 0.29 0.86
‘2’ 1.71 0.22 0.72
‘3’ 1.07 0.11 0.43
‘4’ 0.87 0.09 0.35
‘5’ 0.90 0.08 0.35
‘6’ 0.93 0.09 0.37
‘7’ 0.93 0.05 0.34
‘8’ 0.92 0.09 0.37
‘9’ 0.88 0.04 0.32
‘a’ 4.73 3.30 3.78
‘A’ 0.12 0.67 0.49
‘b’ 0.95 0.73 0.80
‘B’ 0.05 0.35 0.25
‘c’ 2.56 2.02 2.20
‘C’ 0.25 1.13 0.84
‘d’ 2.28 1.92 2.04
‘D’ 0.10 0.79 0.56
‘e’ 7.65 6.09 6.61
‘E’ 0.14 0.98 0.70
‘f’ 1.30 1.33 1.32
‘F’ 0.11 0.46 0.34
‘g’ 1.47 1.10 1.22
‘G’ 0.05 0.49 0.34
‘h’ 1.91 1.56 1.68
‘H’ 0.04 0.29 0.21
‘i’ 4.65 3.73 4.04
‘I’ 0.20 0.87 0.65
‘J’ 0.05 0.05 0.05
‘j’ 0.05 0.01 0.02
‘k’ 0.39 0.44 0.42
‘K’ 0.04 0.11 0.09
‘l’ 2.65 2.24 2.38
‘L’ 0.11 0.80 0.57
‘m’ 1.97 1.45 1.62
‘M’ 0.18 0.44 0.35
‘n’ 4.55 3.60 3.92
‘N’ 0.05 0.58 0.40
‘newline’ 1.89 3.19 2.76
‘o’ 4.17 3.27 3.57
‘O’ 0.04 0.68 0.47
‘p’ 1.50 1.59 1.56
‘P’ 0.11 0.54 0.40
‘q’ 0.18 0.05 0.09
‘Q’ 0.01 0.01 0.01
‘r’ 3.87 3.51 3.63
‘R’ 0.18 0.80 0.59
‘s’ 3.65 3.40 3.48
‘S’ 0.20 1.14 0.83
‘t’ 5.85 5.24 5.44
‘T’ 0.29 0.92 0.71
‘tab’ 0.16 2.70 1.85
‘u’ 1.66 1.43 1.51
‘U’ 0.04 0.36 0.25
‘v’ 0.56 0.57 0.57
‘V’ 0.03 0.20 0.14
‘w’ 0.63 0.58 0.60
‘W’ 0.03 0.29 0.20
‘x’ 0.34 0.46 0.42
‘X’ 0.01 0.08 0.06
‘y’ 0.85 0.55 0.65
‘Y’ 0.02 0.10 0.07
‘z’ 0.18 0.13 0.15
‘Z’ 0.03 0.02 0.02
sum 99.98 100.02 100.01

我的weighted frequencies是按照latex 1 C++ 2的比例计算的。

该结果不能和english alphabet frequencies直接比较。比如《The frequency of the letters of the alphabet in English》只统计26个英文字母,而我们包含了标点符号。但order仍可比较。

例如,《The frequency of the letters of the alphabet in English》最频繁的字母是EARIO。而我的最频繁字母是ETINS。

Analyze frequency distribution

tab q w e r t y u i o p [ ] \
1.85 0.10 0.80 7.31 4.22 6.15 0.72 1.76 4.68 4.04 1.96 0.15 0.15 0.76
control a s d f g h j k l ; newline
4.26 4.31 2.60 1.66 1.57 1.88 0.07 0.51 2.95 0.81 0.11 2.76
shift z x c v b n m , . / shift
0.17 0.48 3.04 0.71 1.05 4.32 1.98 1.00 1.46 0.41
total 6.39 5.59 12.95 15.37 10.74 6.19 8.44 7.11
hand 40.29 32.48

shift、control的频率没有统计,因为我不打算更改这些键的位置。但就算不统计也知道,这些键一定是pinkie按的。

按照统计图,我的右手手指的频率分布不好。middle finger的工作量小于pinkie。

吸收尝试Dvorak的经验,我这次只交换两个按键。根据统计图,我应该处理pinkie和middle finger的workload。发现p和k适合交换。

交换后的频率图如下。

tab q w e r t y u i o k [ ] \
1.85 0.10 0.80 7.31 4.22 6.15 0.72 1.76 4.68 4.04 0.51 0.15 0.15 0.76
control a s d f g h j p l ; newline
4.26 4.31 2.60 1.66 1.57 1.88 0.07 1.96 2.95 0.81 0.11 2.76
shift z x c v b n m , . / shift
0.17 0.48 3.04 0.71 1.05 4.32 1.98 1.00 1.46 0.41
pinkie ring middle index index middle ring pinkie
total 6.39 5.59 12.95 15.37 10.74 7.64 8.44 5.66
hand 40.29 32.48

可惜k和p的位置没有跟Dvorak或Colemak布局匹配。

最后,更改Windows按键映射,可以用https://github.com/randyrants/sharpkeys/

用File locator Pro验算,发现确实p比k常用。