Windows更改鍵盤設定: AutoHotKey

--

前言

自從上一篇「Linux 永久更改鍵盤設定」後,用Linux打字舒舒服服,可是回來用Windows,設定就全部都跑掉了,又只能移動手掌按遠遠的Backspace,非常困擾

今天終於受不了了,開始研究Windows的版本。Google一下發現,其實意外的簡單──只要安裝一個神套件就行了!

AutoHotKey

AutoHotKey是一個開源的軟體工具,用來設定快捷鍵,節省重複性工作的時間。比如說你可能每天都要輸入你的帳號或信箱,或者要註冊時要填寫住家地址,這時候如果可以按一個鍵就幫你完成這些工作,那不是很棒嗎?

AutoHotKey也支援更改鍵盤設定,除了基本的改變鍵位外,還可以做任何熱鍵(HotKey)和熱字串(HotString)的設置(可以參考這篇的說明),非常方便,而且容易上手,文件也寫得相當清楚

總之,想改鍵盤設定,用他就對了!!

安裝

官網下載AutoHotKey Installer,點選安裝即可,使用方法在這裡有詳細的說明,這裡就不再重述,安裝完後只要用記事本開一個.ahk的檔案編輯就行了~

接下來就看看我怎麼把Win10調教成跟Linux一樣吧!

我的設定

; 我的keyboard_setting.ahk
SetCapsLockState, Off ; 把CapsLock原本的功能關掉
CapsLock & e::PgUp ; 同時按「CapsLock」和「e」,會變成「PageUp」
CapsLock & r::PgDn
CapsLock & i::Home
CapsLock & o::End
CapsLock & a::Delete
CapsLock & d::Enter
CapsLock & f::Enter
CapsLock & g::=
CapsLock & h::Left
CapsLock & j::Down
CapsLock & k::Up
CapsLock & l::Right
CapsLock & `;::Backspace ; 分號是保留字,所以前面要加「`」
; 放在「&」前面的按鍵會失去原本的功能,這裡把他加回來,不過改成Escape,方便Vim使用
CapsLock::Send {Esc}
; 到這邊就讓Windows變成跟上次的Linux設定一樣了!不過還有很多很酷的功能,如熱字串:; 之後打「btw 」就會自動變成「By the way,」!
::btw::By the way,

(在.ahk檔裡面分號是註解)

編輯.ahk檔之後,點兩下,AutoHotKey就會載入設定了!如果有錯誤的話也會提醒,不用擔心

自動載入

不過如果每次開機或登入都要重新按.ahk檔,也是有點麻煩,所以我們可以把.ahk檔放到C:\Users\(使用者名稱)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 裡面,或按Win+R叫出執行後打 shell:startup 也可以進入到這個資料夾,這樣登入後就會自動執行上面的script了~

總結

有了上次的經驗後,這次找到&設定AutoHotKey意外地快,大概半小時內就解決了。除了上面提到的功能,其實還有不少東西可以玩,安裝AutoHotKey後直接執行程式,裡面也有相當詳細的document,有興趣的可以自己玩玩看~

[2019/05/12 Update]

上面的設定會造成常常不小心觸發capslock,一直變成大寫輸入,SetCapsLockState, Off 這行好像沒甚麼用。參考 https://autohotkey.com/board/topic/51215-completely-disable-capslock/加上*CapsLock::Return 可以解決不小心按到"CapsLock+modifier"觸發大小寫轉換的問題,然而按到"CapsLock+沒有設定普通鍵"還是會壞掉

[2019/05/13 Update]

由於還是沒辦法解決誤觸的問題,於是我到AutoHotKey論壇上發問,沒想到很快就有人回復了: https://www.autohotkey.com/boards/viewtopic.php?f=76&t=64465

問題解決!

更新後的keyboard_setting.ahk :

SetCapsLockState, Off*CapsLock::
KeyWait, CapsLock
If A_ThisHotkey = *CapsLock
Send, {Blind}{Esc}
Return
#IF GetKeyState("CapsLock","P")
e::PgUp
r::PgDn
i::Home
o::End
a::Delete
d::Enter
f::Enter
g::=
h::Left
j::Down
k::Up
l::Right
`;::Backspace
n::Send ^+{Left}{Del}
.::Send ^+{Right}{Del}
*::Return
Space::Return
Enter::Return
Backspace::Return
#IF

--

--