好久沒上博客了,自己的那么一點微末道行也不敢拿出來丟人現眼。實際上,過去的幾年,真的是讓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