因爲已經厭倦了機械鍵盤,又實在沒法抵擋 HHKB 的顏值,入手了一枚 hhkb pro2。安全
入手以後馬上傻眼,方向鍵不只須要按 Fn 鍵才能觸發,那憋屈的鍵位讓我這用方向鍵與 Ctrl+C 同樣多的程序猿情何以堪!好在我是程序猿,天生不怕折騰,在通過設置 DIP 開關、使用 Autohotkey 改鍵、設置 Win10 系統權限等一系列的折騰以後,終於能夠舒服的使用這款 HHKB 寫代碼了,效率更超以前的機械鍵盤。編輯器
SW1 on、SW2 off = Lite ext 模式,既 ◇ 鍵爲 Win 鍵。
SW3 on = Delete 鍵改成退格鍵。
SW4 on = 左側 ◇ 鍵爲 Fn 鍵。
SW5 off = 不交換 ◇ 與 Alt 鍵。
SW6 on = 啓用喚醒功能。測試
首先要解決方向鍵問題。我並非 Emacs/Vim 黨,想來想去仍是把「上下左右」的快捷鍵設置成 Ctrl + I、K、J、L 比較直觀。另外,編代碼時跳到行首、行尾的操做也不少,因此能夠再加上 Ctrl + H 跳到行首,Ctrl + ' 跳到行尾的快捷鍵。腳本也很簡單:優化
^j::Send,{Left} ^l::Send,{Right} ^i::Send,{Up} ^k::Send,{Down} ^h::Send,{Home} ^'::Send,{End}
可是,僅僅這樣並無比原來方便,既然進入了雙手不離開主鍵盤區的領域,就要儘量減小使用鼠標才能提升效率,畢竟如今要實現按方向鍵已經必須使用兩隻手了。編代碼選中變量名的操做不少,咱們已經實現了 Ctrl + I、K、J、L 上下左右移動光標,若是能實現 Ctrl + ◇ + I、K、J、L 上下左右選中文本就很是方便並且直觀了!觀察一下 HHKB 的鍵盤,正好 ◇ + I、K、J、L 等價於 PrintScreen、Home、小鍵盤的除號、PageUp 鍵,因此就再增長以下腳本代碼:spa
^PrintScreen up::Send,{RShift down}{Up}{RShift up} ^Home up::Send,{RShift down}{Down}{RShift up} ^NumpadDiv up::Send,+{Left} ^PgUp up::Send,{RShift down}{Right}{RShift up}
注意在每一個快捷鍵後面都加上了 「up」。這是由於在測試時發現,若是 Ctrl + ◇ + J 按住的話,也就是但願光標以最快速度往左側選中文本的時候,每選中五、6個字母,選中的字母就會被一個 「/」 字母替換掉!也就是原本應該連續輸出 Shift + Left,卻偶爾直接輸出了 「/」。而快捷鍵後面加上 「up」 的意思是不容許按住,只容許一下一下按快捷鍵。這樣雖然不會出錯了,可是這一下一下按效率實在過低了。通過反覆嘗試,我找到一個祕技:先使用 「NumpadDiv::CtrlBreak」 和 「PgUp::CtrlBreak」 把要輸出的快捷鍵改成不會實際輸出字符的「CtrlBreak」鍵,就不怕鍵衝突了。實際腳本這個樣子:操作系統
NumpadDiv::CtrlBreak PgUp::CtrlBreak ^NumpadMult up::Send,{RShift down}{Home}{RShift up} ^NumpadDiv::Send,+{Left} ^Home up::Send,{RShift down}{Down}{RShift up} ^PgUp::Send,{RShift down}{Right}{RShift up} ^PrintScreen up::Send,{RShift down}{Up}{RShift up} ^Right up::Send,{RShift down}{End}{RShift up} ^NumpadSub up::Send,{RControl down}{Left}{RControl up}{RControl down}{RShift down}{Right}{RControl up}{RShift up} ;select whole word left to right ^End up::Send,{RControl down}{RShift down}{Left}{RControl up}{RShift up} ;select whole word left ^PgDn up::Send,{RControl down}{RShift down}{Right}{RControl up}{RShift up} ;select whole word right ^NumpadAdd up::Send,{Home}+{End}
上面的腳本還同時實現了 Ctrl + M 選中單詞,Ctrl + N 選中行,Ctrl + < 向左按單詞擴選,Ctrl + > 向右按單詞擴選。最棒的仍是能夠容許按住 Ctrl + ◇ + J 和 Ctrl + ◇ + L 來快速擴選了,代價是犧牲了小鍵盤除號和PageUp鍵,不過能夠接受。rest
另外像把變量首字母由大寫改成小寫這樣的功能,雖然不是很經常使用,但也能有效提高效率,我把快捷鍵設置爲 Ctrl + 反引號,實現起來稍稍有點複雜但也不難。使用一段時間,作了些優化和微調,最終的Autohotkey腳本:code
NumpadDiv::CtrlBreak PgUp::CtrlBreak ^j::Send,{Left} ^l::Send,{Right} ^i::Send,{Up} ^k::Send,{Down} ^h::Send,{Home} ^'::Send,{End} ^NumpadMult up::Send,{RShift down}{Home}{RShift up} ^NumpadDiv::Send,+{Left} ^Home up::Send,{RShift down}{Down}{RShift up} ^PgUp::Send,{RShift down}{Right}{RShift up} ^PrintScreen up::Send,{RShift down}{Up}{RShift up} ^Right up::Send,{RShift down}{End}{RShift up} ^NumpadSub up::Send,{RControl down}{Left}{RControl up}{RControl down}{RShift down}{Right}{RControl up}{RShift up} ;select whole word left to right ^End up::Send,{RControl down}{RShift down}{Left}{RControl up}{RShift up} ;select whole word left ^PgDn up::Send,{RControl down}{RShift down}{Right}{RControl up}{RShift up} ;select whole word right ^NumpadAdd up::Send,{Home}+{End} RWin & '::Send,{RWin down}{RControl down}{Right}{RWin up}{RControl up} RWin & `;::Send,{RWin down}{RControl down}{Left}{RWin up}{RControl up} +Esc::Send,{RAlt down}{Left}{RAlt up} +Tab::Send,{RAlt down}{Right}{RAlt up} ; Ctrl + ` set firt char to lower ^`:: clipBak := ClipboardAll ; bak clipboard Clipboard := "" ;clear clipboard Send,{RControl down}{Left}{RControl up}{RShift down}{Right}{RShift up}{RControl down}c{RControl up} ;copy first char to clipboard ClipWait, 1 ;wait clip complete ; convert firt char in clipboard to lower selText := Clipboard ;MsgBox % selText StringLower, selText, selText ; set lower char to clipboard and paste it to replace in place Clipboard := selText Send, ^v Sleep, 100 ;prevent restore clipBak too early Clipboard := clipBak ; restore clipboard Send, {RControl down}{Right}{RControl up} return ;Ignore these shortkey ^1::return ^2::return ^3::return ^4::return ^5::return ^6::return ^7::return ^8::return ^9::return ^0::return ^-::return ^=::return ^\::return ^Left::return
到目前爲止彷佛一切都很完美,可是打開 Visual Studio,忽然發如今 VS 裏面剛剛設置的全部快捷鍵全!失!效!!一開始還覺得是 VS 把全局快捷鍵給屏蔽了,想找找能不能經過 VS 裏面的設置不屏蔽全局快捷鍵,結果無功而返,感受怕是解決不了了。後來仍是在靠譜的 Stackoverflow 裏面找到了答案。原來是由於 VS 運行於管理員權限,而 Autohotkey 運行於普通用戶權限。解決方法就是在 AutoHotkeyU64.exe(若是是64位操做系統的話)右擊,選「屬性」,在「兼容性」選項卡里,勾選「以管理員身份運行此程序」。圖片
終於解決了 VS 快捷鍵失效的問題,可是立刻又發現以管理員身份運行 Autohotkey 會形成它不能開機自動啓動。解決方法是禁用 UAC。禁用 UAC 的方法是:Win+R,輸入gpedit.msc,運行打開「本地組策略編輯器」,計算機配置->Windows設置->安全設置->本地策略->安全選項->以管理員批准模式運行全部管理員,改成"已禁用"便可。ip