前言
- 參考Autohotkey說明文件
- ahk的指令一般是不分大小寫,忽視額外/行末的空白鍵,除非特別說明。
簡介、 簡單範例
::btw::by the way- btw是hotstring,兩邊各夾著::,打完hotstring再按ending character(例如空白鍵、標點符號),btw就會替換成by the way。
Msgbox You typed "btw".
return
- hotstring可以搭配ahk的指令,本例為輸入btw後跳出訊息框顯示You typed "btw".。
Ending Characters
- 除非另外設定(見底下"*"設定),輸入ending character才會觸發hotstring,預設的ending character包含-()[]{}:;'"/\,.?!`n `t,其中`n為斷行(按Enter),`t為tab,`n和`t之間有一個空白(空白鍵)。
- Ending characters可更改,但會作用到整個script,不像底下介紹的設定是作用到其後的hotstring。
常用設定
#Hotstring c r *0- hotstring設定影響到所有其後的hotstring,上面的指令將設定c和r兩個選項。
- *0表示將*這個設定關掉(加一個零在後面)。
- 另一種方式是寫在前兩個冒號之間,這樣的設定只會影響當前的hotstring,後面的hotstring不會影響。
- 不需要輸入ending characters便能觸發hotstring。
- hotstring可以在一個單字內部被觸發。
- 預設情況hotstring觸發時,會先送出backspace將原hotstring刪除,再輸出替代的字串,b0設定則不送出backspace,保留原hotstring。
- 例如:*b0:<td>::</td>{left 5},在輸入時(不需要ending character因為有星號*設定),自動輸出以及五個左方向鍵,最後游標停在<td>和</td>之間。
- hotstring為區分大小寫,:c:Btw::和:c:btw::是不一樣的hotstring。
- 預設情況輸入的hotstring為首字大寫(eg. Btw)時,送出的字串也是首字大寫(eg. By the way);輸入的hotstring全部大寫(eg. BTW),則送出的字串也全部大寫(eg. BY THE WAY);其他的輸入方式,則照原字串輸出。c1設定則不管輸入的大小寫,都照原字串輸出。
- 預設情況輸入ending character會觸發hotstring,且保留ending character。o設定仍要輸入ending character,但ending character會被刪除。
- 適用於名詞複數、所有格、動詞過去式的情況。以:o:nd::nodule為例,nd s會輸出nodules。
- 預設情況輸出字串中{enter}是Enter、^c是ctrl+c(詳見Send)。r設定(raw)則忽視特殊字元,字串中是{enter}就輸出{enter}。
Long Replacements
::text1::(
line1, blabla
line2, blabla
)
- 如上面格式時,可以輸出一大段文字。預設使用r設定,視括號內為純文字,除非以r0設定蓋過。
Context-sensitive Hotstrings
#IfWinActive 放射線資訊管理系統::scc::suggest clinical correlation
#IfWinActive
::scc::squamous cell carcinoma
- #IfWinActive所夾住的程式碼,表示在某個視窗active時才會作用,scc會輸出suggest clinical correlation,在其他視窗則是squamous cell carcinoma。也可用#IfWinExist。
AutoCorrect
- 官網所提供的自動拼字校正ahk,收集4700個常見的英文拼字錯誤。按Win+h可加入新的拼字校正。
其他
::test::SendInput %var%
return
- 如果要輸出一個變數的值,則要用SendInput指令輸出var的值。
::btw:: by the way
- 在行末加一個accent/backtick ( ` ),則`之前的空白也包含在輸出的字串。此例btw將輸出by the way 。
- 第二行則會輸出 by the way(注意最前面的空白)。
- 預設情況下滑鼠左右鍵的點擊會重設hotstring,因為滑鼠動作通常表示使用者要改變輸入位置。可用上述設定使滑鼠動作不動設hotstring。
- 內建變數A_EndChar會儲存最後一個ending character,可判斷A_EndChar達到不同的輸出方式。
- 在ahk中有些escape character,如果作為hotstring也需要以`來escape,除了逗點 ( , )、百分比符號 ( % )、冒號 ( : )。
SendPlay %var%
return
- hotstring最多40個字元。在SendInput模式下最多輸出5000個字元,在其他模式最多16383個字元。利用上述SendPlay輸出變數值,則沒有上限。另外參考SendMode,一般建議設定SendMode Input。
::hs::string2
- 如果同時有兩個以上的hotstring被觸發,會優先觸發在script中出現的第一個。在此例中hs會觸發string1。
- Backspace並不會重設hotstring,所以打成btx後按backspace再打w仍是觸發btw;但方向鍵、上一頁、下一頁、Home、End會重設hotstring。
- 可參考Input以達到更進階用途。
實用範例
:*?:``::+^{left}{bs}
- 在輸入單字途中(?設定)可觸發,不需要ending character(*設定)。
- hotstring為鍵盤最左上角的`(以`來escape,`` = `),可觸發shift (選取) + ctrl+左方向鍵 (跳到一個單字之前) + backspace (刪除)。
- 總結來說類似backspace,但backspace刪除一個字元,而上述hotstring刪除一個單字。