It takes a strong man to save himself, and a great man tosave another.
——《肖申克的救赎》
——《人性的弱点》
不要以为渺小的,就没有力量;不要以为卑微的,就没有尊严。强者与弱者之间唯一的差别,只在于信念是否坚定
——《明朝那些事儿》
记得小学上微机课,第一眼看到键盘的时候,恐怕大家的想法跟我差不多:“……诶,怎么不是按照字母表排列的呢,太坑了……”。其实这真是一个坑,而且是一个不会被填上的坑,看一则故事:
在19世纪70年代,肖尔斯公司是当时最大的专门生产打字机的厂家。由于当时机械工艺不够完善,使得字键在击打之后的弹回速度较慢,一旦打字员击键速度太快,就容易发生两个字键绞在一起的现象,必须用手很小心地把它们分开,从而严重影响了工作效率。
为了解决这个问题,设计师和工程师伤透了脑筋。后来,有一位聪明的工程师提议:打字机绞键的原因,一方面是字键弹回速度慢,另一方面也是打字员速度太快了。既然我们无法提高弹回速度,为什么不想办法降低打字速度呢?
降低打字员的速度有许多方法,最简单的方法就是打乱26个字母的排列顺序,把较常用的字母摆在笨拙的手指下,比如,字母"O"、"S"、"A"是使用频率很高的,却放在最笨拙的右手无名指、左手无名指和左手小指来击打。使用频率较低的"V"、"J"、"U"等字母却由最灵活的食指负责。
结果,这种"QWERTY"式组合的键盘诞生了,并且逐渐定型。后来,由于材料工艺的发展,字键弹回速度远大于打字员击键速度,但是很多人都已经熟悉了这个坑人的顺序,因此就这么一直流传了下来。不过,我们还是有办法改变这个情况的,读完这篇文章,你就可以通过修改windows注册表进行改键。
键盘上的每一个键都有两个唯一的数值进行标志。即当一个键按下时,它们产生一个唯一的数值,当一个键被释放时,它也会产生另一个唯一的数值。
比如 0x011bESC 按下产生01 释放产生1b
0x3b00 F1
通过修改注册表项来修改键盘映射的步骤如下:
1 在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout\ 下右键新建一个二进制值项: "Scancode Map"
这个项目可实现对键盘按键的映射。这里映射的意思可理解为“替换”,可将任意一键替换成其它键。
该值项以16进制表示,分为五个部分,每个逗号之间都为一个字节。
"ScancodeMap" = 00,00,00,00,00,00,00,00, 02,00,00,00, 01,00, 02,00, 00,00,00,00
8个字节。 这是版本信息号。照例写就好。
4个字节。 这是映射键的总数。按照二进制的读写规则,低位在左,高位在右。02 00 00 00 这个数实际就是:0000 00 02 。从 02 开始,一个映射键是 02 ,两个是03 ,依次递加,十个是 0B 。
2个字节。 表示替换后按键的”扫描码“。如:ESC 键的扫描码是 01 ,所以就表示 0100 。再如 左Ctrl键扫描码是 1D00, 而右Ctrl键是 1D E0 。
2个字节。 表示原按键的”扫描码“。格式同上。
以四个 00 结束。
例子:
将F1映射为ESC则,该值项为:
00 00 00 0000 00 00 00 02 00 00 00 01 1b 3b 00 00 00 00 00
将F1映射为ESC, ESC映射为F1则,该值项为:
00 00 00 0000 00 00 00 03 00 00 00 01 1b 3b 00 3b 00 01 1b 00 00 00 00
由于工作需要,笔者常常需要在VS下进行编程开发工作,虽说vs可以装载插件VA大幅度的编码效率,但是在选择匹配项或者改变光标位置的时候,不可避免的需要移动右手手肘,这是很不自然的,因此,根据这个问题,笔者设计了下面的一套改键方案,大幅度的降低右手肩部的负担,提高编码效率。
该方案的值项如下:
总结:
就编程来说,这个方案相比不改键的方案来说,个人觉得是有很大的提高。但是,作为一个计算机从业人员来说,这个方案是治标不治本的。具体来说,恐怕正如一句话所说的:
在一个蔚蓝的星球上,流传着一个被誉为编辑器之神的EMACS和一个被誉为神的编辑器的VIM。研究这两种编辑器中的其中一种才是王道。