2012年11月27日 星期二

Autohotkey hotstring簡介

前言

  • 參考Autohotkey說明文件
  • ahk的指令一般是不分大小寫,忽視額外/行末的空白鍵,除非特別說明。


簡介、 簡單範例

::btw::by the way
  • btw是hotstring,兩邊各夾著::,打完hotstring再按ending character(例如空白鍵、標點符號),btw就會替換成by the way
::btw::
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之間有一個空白(空白鍵)。
#Hotstring EndChars -()[]{}:;'"/\,.?!`n `t
  • Ending characters可更改,但會作用到整個script,不像底下介紹的設定是作用到其後的hotstring。


常用設定

#Hotstring c r *0
  • hotstring設定影響到所有其後的hotstring,上面的指令將設定cr兩個選項。
  • *0表示將*這個設定關掉(加一個零在後面)。
:cr:j@::john@somedomain.com
  • 另一種方式是寫在前兩個冒號之間,這樣的設定只會影響當前的hotstring,後面的hotstring不會影響。
* (星號)
  • 不需要輸入ending characters便能觸發hotstring。
? (問號)
  • hotstring可以在一個單字內部被觸發。
b0
  • 預設情況hotstring觸發時,會先送出backspace將原hotstring刪除,再輸出替代的字串,b0設定則不送出backspace,保留原hotstring。
  • 例如:*b0:<td>::</td>{left 5},在輸入時(不需要ending character因為有星號*設定),自動輸出以及五個左方向鍵,最後游標停在<td>和</td>之間
c
  • hotstring為區分大小寫,:c:Btw:::c:btw::是不一樣的hotstring。
c1
  • 預設情況輸入的hotstring為首字大寫(eg. Btw)時,送出的字串也是首字大寫(eg. By the way);輸入的hotstring全部大寫(eg. BTW),則送出的字串也全部大寫(eg. BY THE WAY);其他的輸入方式,則照原字串輸出。c1設定則不管輸入的大小寫,都照原字串輸出。
o
  • 預設情況輸入ending character會觸發hotstring,且保留ending character。o設定仍要輸入ending character,但ending character會被刪除。
  • 適用於名詞複數、所有格、動詞過去式的情況。以:o:nd::nodule為例,nd s會輸出nodules
r
  • 預設情況輸出字串中{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   `
::btw:: by the way
  • 在行末加一個accent/backtick ( ` ),則`之前的空白也包含在輸出的字串。此例btw將輸出by the way  
  • 第二行則會輸出 by the way(注意最前面的空白)
#Hotstring NoMouse
  • 預設情況下滑鼠左右鍵的點擊會重設hotstring,因為滑鼠動作通常表示使用者要改變輸入位置。可用上述設定使滑鼠動作不動設hotstring。
A_EndChar
    • 內建變數A_EndChar會儲存最後一個ending character,可判斷A_EndChar達到不同的輸出方式。
    ::`t`n``::
    • 在ahk中有些escape character,如果作為hotstring也需要以`來escape,除了逗點 ( , )、百分比符號 ( % )、冒號 ( : )。
    ::texts::
    SendPlay %var%
    return
    • hotstring最多40個字元。在SendInput模式下最多輸出5000個字元,在其他模式最多16383個字元。利用上述SendPlay輸出變數值,則沒有上限。另外參考SendMode,一般建議設定SendMode Input
    ::hs::string1
    ::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刪除一個單字。