huaxiazhihuo 阅读(196) 评论(0)

键盘布局的改进之道

      好久没上博客了,自己的那么一点微末道行也不敢拿出来丢人现眼。实际上,过去的几年,真的是让C++和MFC害惨了,一直自个儿固步自封,说什么没有透彻掌握它们,绝不碰其他的玩意,结果就悲剧了,眼界相当重要,再怎么夸张都不为过。显然,MFC是垃圾,但实际上,C++也不是什么好菜,嗯,不吐槽了。还是做点更具实际意义的事情吧,今天的主角是键盘布局。
      由于历史的原因,当今流行的26字母的qwerty键盘布局并不是很科学,甚至有种说法,随便弄一个布局,都要比qwerty好,只因qwerty当初的设计意图就是为了最大限度的降低打字速度,这么说就有点过分了。不过,后来重新发明的布局,特别是DVORAK,的确比qwerty更具优势。但是,不管DVORAK的先天设计多么合理,如何在市场上如何造势,都不能撼动qwerty的主流地位。这很让人无语,由此可见,技术并不是决定市场的首要因素,关键是先占领市场,形成标准,不管这个标准有多差,只要有很多人遵守执行就行了,好比XX红色政党,又好比MFC,现在VC2012上居然还有他的一席之地,中国计算机图书还有那么多的VC书籍,实在令人疼心疾首。不过,本文的目的并非推荐DVORAK,当然,DVORAK键盘布局还是很值得广泛使用,但是既然已经如此的熟悉qwerty键盘了,那么也没有必要再训练了,实际上,qwerty已经足够日常使用了,我们平时打字,最大的限制在于大脑的速度,键盘布局到不是瓶颈。
      我要说的是,对于码农来说,键盘的另一不合理之处在于,小指的压力过大,左小指还好,只需负责Esc、~、……、A、Z等11个键位,先不论esc太远,这让vim情何以堪,而无关紧要的大小写切换键居然占据了那么优势明显好用之要地,等等无理设计。右小指表示压力更大,起码打了两倍,因为它的掌管比左小指的大了一倍之多,几乎是主键盘的1/4之多的键位,而且这些键,使用率都相当的频繁,如果再加上上下左右方向键还有delete,这实在太无天理了。可怜的两只小指,弱不禁风,娇怯怯,却要承受着生命难以承受之痛。相比之下,平时最能干的大拇指,居然只负责长长的空格键和两只alt这三个,这种不合理不公平的待遇,不禁让人怒从心头起,恶向胆边生,必须改革,彻底改革。给小指减负,给大拇指加负。
      当然,改革之前,先介绍windows下两大偷天换日的键盘修改利器,autohotkey和keytweak,其性能和使用说明,请各位自行百度谷歌。为了达到目的,老夫真的是挖空心思,无所不用其极。方法如下:
      1、借助autohotkey,将右手的所有键位都往右挪一格,也就是说,原来的7ujm这4个键,被发配到8ik,上,而8ik,就到了9ol.上,其他的以此类推,至于最右边的=\'/就只好屈居于开始时的7ujm上了。这样一来,小指起码少按了4个键位。右拇指只要愿意,可以不费力的按到右win键了,现在,两只拇指终于可以掌控四个键位了,四个很重要的键位,恩,目前除了space,其他三个似乎没啥特别,但很快,就会看到剩下来的三个中的其中一个,将发光发热,照耀整个键盘,最有作用。
      2、众所周知,上下左右home end 和翻页,这些键,其实也很重要,但是要按到它们,必须跑大老远,挥动右手做大幅度的机械运动。以至于,在vim和emacs中,都有各自的快捷方式来实现同样的功能。什么hjkl,什么ctrl+n,ctrl+p等等,不一而足,这种快捷方式,居然是其优于其他编辑器的亮点之一。但是,上下左右等键位可以配上ctrl、shift、win修饰键,然后马上就可以做出很多种组合,当然,emacs和vim也真是神通广大,针对每种组合,基本上都有对应的快捷键,只是记忆起来,实在麻烦。而区区在下,还曾经吭哧吭哧的拼命记忆过。好吧,好不容易习惯了vim和emacs那套逆天指法,却发现只能在vim或者emacs的环境下使用,屠龙之技,屠龙之技。我们要求的是,能够有一套放之于四海而皆准的指法,可以在所有的软件下,所有的场合下都发光发热。
      可能吗?确实有办法,就是在新键盘布局下,将右拇指能比之前轻松的按到的alt,摇身一变,变成换挡键,只要此键一按,马上wsad(游戏模式下的上下左右方向键)就变成上下左右了,配合jkl就可以组合出ctrl shift alt等效果。ec为home、end,rv则是上下翻页,f为esc键,各种各样,何其方便哉!剩下来的问题,就是右alt该何去该从,很简单,鹊巢鸠占,老实不客气,就占到右win键上,至于右win键怎么办,该怎么方便就怎么方便,甚至不存在,也没关系。制造换挡键,必须用到keytweak,autohotkey是不行的,鉴于数字小键盘上的除号实在很少用到,因此就拿他来当牺牲品了。其他的种种,请大家参考随文附上的ahk脚本。
      这样一来,只要稍加训练,键盘用起来将会很爽了。不爽的是,用别人的电脑,将特别的不习惯,各种难受。
      此外,右ctrl,可以用右掌腹来按,不必烦劳小指,他已经够累了。然后,汉字输入,要用拼音,最好是双拼,切记切记。不要在用什么五笔了,那是特别落后的输入法,其令人发指之处,可以和mfc值得一拼。在下曾经是五笔高手,下过苦功夫,多少个夏天夜晚,挥汗如雨,苦练五笔,一分钟达到百多字,绝对有资格说五笔的不是。现在我用双拼很高兴,已经不记得五笔的很多字根了,才不到半年的时间。
      其实,我都努力过,只是,都把汗水和精力,放在垃圾上了。C++是垃圾吗,当然不是了,但实际上,……,我觉得C++可以和粪便有得一比,作为肥料,还是很好地。

7::=
8::7
9::8
0::9
-::0
=::-

u::y
i::u
o::i
p::o
[::p
]::[
\::]

j::h
k::j
l::k
SC27::l
'::SC27

m::n
,::m
.::,
/::.

y::\
h::'
n::/

NumpadAdd::=
Shift & NumpadDel:: Send, {Backspace}

NumpadDiv & a:: Send, {Left}
NumpadDiv & d:: Send, {Right}
NumpadDiv & w:: Send, {Up}
NumpadDiv & s:: Send, {Down}

NumpadDiv & e:: Send, {Home}
NumpadDiv & c:: Send, {End}
NumpadDiv & r:: Send, {PGUP}
NumpadDiv & v:: Send, {PGDN}

NumpadDiv & z:: Send, {BackSpace}
NumpadDiv & x:: Send, {Delete}
NumpadDiv & f:: Send, {Escape}

CapsLock::LControl
LControl::Esc
Esc::CapsLock

NumpadDiv & k::
    Send {Control down}
KeyWait k  ; 等待用户释放按键.
    Send {Control up}
return

NumpadDiv & Shift::
    Send {Shift down}
KeyWait Shift  ; 等待用户释放按键.
    Send {Shift up}
return

NumpadDiv & Control::
    Send {Control down}
KeyWait Control  ; 等待用户释放按键.
    Send {Control up}
return

NumpadDiv & Alt::
    Send {Alt down}
KeyWait Alt  ; 等待用户释放按键.
    Send {Alt up}
return

NumpadDiv & #::
    Send {Win down}
KeyWait #  ; 等待用户释放按键.
    Send {Win up}
return

NumpadDiv & l::
    Send {Shift down}
KeyWait l  ; 等待用户释放按键.
    Send {Shift up}
return

NumpadDiv & SC27::
    Send {Alt down}
KeyWait SC27  ; 等待用户释放按键.
    Send {Alt up}
return

NumpadDiv & '::
    Send {LWin down}
KeyWait '  ; 等待用户释放按键.
    Send {LWin up}
return

posted on 2013-06-29 02:56 华夏之火 阅读(3) 评论(0)  编辑 收藏 引用