转自: http://hi.baidu.com/wildtoy/blog/item/ecdb60828781b995f703a630.html
热字串:ahk脚本中两个双冒号之间插入缩写词
自动扩展:使用时输入缩写词并加上触发结束符,即可将热字串用其后面的自定义内容替换,形如【::btw::by the way】不含方括号。
结束符(ending character):
在默认状态下,用户必须在键入热字串的缩写词后再键入一个结束符,使用 * 选项 即可免去这一步。
结束符默认是指这些字符:-()[]{}':;"//,.?!`n `t (注意:`n代表回车,`t代表Tab,在`n和 `t之间还有一个空格)。您可以仿照下面的语句来更改这一设置:
选项
热字串的默认行为可以有两种方法改变:
- 使用 #Hotstring 命令,用它结合下面的选项进行的设置会影响到其下脚本中的所有热字串,例如:
#Hotstring c r ; 区分大小写并且“发送原文”; - 在热字串的前两个冒号之间插入一个或多个选项,例如:
:c*:j@::john@somedomain.com ; 区分大小写并且取消结束符(也就是说不用结束符即可触发热字串)。
注意:当使用超过一个选项(下面列出)的时候,空格键可被随意添加到这些选项之间(而不会有影响)。
* (星号):不再需要结束符(例如空格和回车等等)来触发热字串。使用 *0 来恢复。在下面的例子里,当@号一被按下即触发热字串从而自动扩展缩写:
:*:yk@::yonken@163.com
? (问号):键入任何含有缩写词的词句都会触发热字串。举个例子,对于 :?:al::airline 这个热字串来说,键入含有“al”的“practical”这个单词将会生成“practicairline”(只是al被替换成了airline而不是整个单词,注意到了吗?)。 使用 ?0 (问号后面一个零)来恢复。
B0 (B后面接一个零): 自动退格删除缩写词的功能将被禁止。取消此功能后若想恢复可使用 B 选项。
C: 区分大小写:用户键入的缩写词必须和脚本中的严格一致(也就是说区分大小写)。使用 C0 (C后面接一个零)来取消此功能。注意:如果您需要为同一个缩写词分开定义为两个只有大小写格式不同的热字串的话,那么请在其中一个热字串的前两个冒号之间插入空格,用以和另外一个热字串区分。这样做是有必要的,因为热字串属于标识,而每个标识必须是唯一的。在下面的这个例子里,第一个热字串使用了一个额外的空格来与第二个区分:
:c :ceo::chief executive officer
:c:CEO::Chief Executive Officer
C1: 取消匹配大小写。使用这个选项来使得那些自动扩展的热字串对大小写不再敏感(即输出结果将和热字串中定义的完全一致)。使用C0 来恢复。热字串默认状态下是匹配大小写的,如果用户键入的缩写词全部都是大写则输出的结果也全部大写;如果键入的第一个字母是大写则输出的第一个字母也会是大写;其他情况的输出结果将和热字串中定义的完全一致。下面针对此热字串--:c :ceo::chief Executive officer来详细说明:
若键入CEO加结束符则输出结果为CHIEF EXECUTIVE OFFICER(全部字母都大写);
若键入Ceo/CEo/CeO等则输出结果为Chief Executive officer(也就是说只是第一个字母改为大写而已);
其他格式的输出结果都是和热字串原来定义的一致,也就是chief Executive officer。
Kn: 按键延迟;通常来说几乎所有使用自动退格和自动扩展功能的热字串的按键延迟都是0。设置为零是被推荐的,因为这样既迅速而又可以很好地配合其它进程(由于内部设置了 Sleep 0)。若需要设置延迟,则给变量 n 赋值即可。用 -1 来表示完全没有延迟,如果您的CPU经常性的处于重负荷状态的话,这会使自动扩展的速度加快。
O: 当自动扩展的文字生成的时候省略结束符。这在你需要结束符来触发热字串而又不想让它输出到目标的时候非常有用。例如:通常我们是这样设置热字串的-::ar::aristocrat,当键入“ar“和空格会输出“aristocrat ”(它画蛇填足地在后面添加了空格符);而当使用O选项后也即o:ar::aristocrat ,键入“ar”和空格会输出“aristocrat”,注意它是没有空格符在后面的。使用O0 (字母O后面接一个零)来恢复。
Pn: 设置热字串的 优先级 (例如 P1)。此选项对实现自动扩展功能的热字串没有影响。
R: 发送替换文字的原文。也就是说热字串将完全一致地输出原文而不会解释{Enter}或^c这些特殊的字符串,从而避免那些有 延续部分(continuation section) 的热字串自动发出回车或Control-C等等命令, 使用 R0 (R后面接一个零)来恢复。
Z [v1.0.30+]: 每触发一次热字串则重设一次热字串识别器。这里的意思是脚本将会在每次热字串触发后消除对前一次键入内容的识别并等待新的热字串。举个例子来说明一下,下面的热字串没有Z选项,所以键入111后热字串将会触发两次而不是一次:
:b0*?:11::
Send xx
return
只要在b0前面插入一个Z,就必须键入1111而不是111来触发两次热字串。 使用 Z0 (Z后面接一个零)来恢复。
------------------------------------------------------------------
如果要直接触发热字串而不必键入结束符,可以使用 * 选项,即用:*:开头。【:*:btw::by the way】
如果想用Tab或空格或回车来充当结束符,则第一个双冒号间加的参数是不能是*等选项的字符(自己理解,可能有误)。
如果想只用Tab做结束符,则第一个双冒号间加的参数是*,第二个双冒号前要写`t。形如【:*:btw`t::by the way】
注意:后面的语句不能直接使用中文字符,否则会输出乱码,解决方法请参考下面的中文解决方法。
延续部分的存在同时使得热字串从默认模式变为 原文模式。留意上面的文字,{Enter}和{Tab}都不会被认为是按键指令,要撤销这一设置的唯一一个方法是在每一个有延续部分的热字串中使用 r0 选项。
这个例子中热字串的作用就是自动地把"btw"删除然后替换为"by the way"从而实现所谓的自动扩展。另外,正如上面所说,热键串还可以用来定义其他动作,不过记住要把相关命令置于热键串之下:
中文解决方法
热字串输出的语句是不直接支持中文的,不过也可换个思路,借助clipboard命令赋予剪贴板自定义的文字,然后通过发送Ctrl+V的方法来输出中文,例如:
::sbs::
clipboard = 顺便说一下
Send, ^v
Return
目前类似%MyVar%这样的变量参数不支持在替换文本中使用。要使用它们就不能把热字串设为自动扩展而是在缩写词之下使用 Send(发送) 命令并用一行Return接上。
内建变量 A_EndChar 就是那些用以触发最近的非自动扩展类的热字串的结束符。如果不需要结束符来触发(*选项的作用),那么它的值为空。此变量对于那些使用发送(Send)命令的热字串或那些键入不同结束符而有不同行为的热字串来说比较有用。要发送结束符自身,需要使用"SendRaw %A_EndChar%"(之所以使用 SendRaw(发送原文) 是因为类似 !{} 这样的字符不能通过普通的发送(Send)命令正确发送。
尽管在热字串定义式中的逗号、百分比符号和单冒号不需要进行 转义,但是那些有空格和空位(Tab)在其左边的重音符和分号就需要转义。请查看 转义列表 获得详细的列表。
尽管 Send(发送)命令的语法 被支持用在自动扩展文本部分(除非用了原文(raw)选项),但热字串的缩写词本身不能用它来表示。也就是说,在缩写词里不用{ENTER}来表示回车键或用{SPACE}来表示空格键。取而代之的方法是使用 `n 来表示回车以及用 `t 来表示跳格(Tab)(请查看 转义列表 获得详细的列表)。 下面举个例子说明:
:*:ok{ENTER}::no problem ; 键入"ok"再加一个回车键不能触发热字串,除非键入完整的ok{ENTER}。
:*:ok`n::no problem ; 键入"ok"再加一个回车键即可触发热字串。
热字串定义了空格和空位(Tab)将被直接认作是字符本身,例如下面的热字串将产生两种不同的结果:
::btw::by the way
::btw:: by the way ; 比上面多了一个空格,那么这个空格也会严格地输出来。
热字串的缩写词不可以超过30个字符。如果长度超出了程序会提醒您的。热字串的替换文本也有AutoHotkey最大行数的限制,但它最多可以达到16,383个字符。不过也可以通过一个巧妙的方法来突破这一限制,那就是在热字串中使用 Send %自定义变量% 。 例如您可以预先设置自定义变量并赋值为超过限制部分的字符,然后在热字串中调用即可。
热字串的先后顺序决定了它们的优先级,换句话来说就是如果有超过一个的热字串符合用户键入的内容,则只有排在最前面的那个热字串才会生效。
运行脚本时用户进行的任何退格行为都将被视为企图核对热字串。但是,如果用户在编辑器中使用了上/下/左/右箭头、PageUp、PageDown、Home和End这些按键时将导致热字串识别重设,也就是说消除对这一次键入内容的识别并等待新的热字串。
即使处于激活状态的窗口忽略用户的键击行为热字串也依然可以输入,也就是说就算替换文本不可见热字串还是会被触发。此外,退格键也还是会撤销最近的键击,尽管您看不到效果。
可以使用 Gosub 或 Goto 来转到指定的热字串标识(Label), 只要在标识名前面加上一对冒号即可。不过,如果在冒号之间没有选项符则必须对双冒号进行转码。例如: Gosub `::btw
尽管热字串不被监控而且在不可见的 输入(Input) 命令生效期间将不会被触发,但可见的输入是可以触发它们的。
热字串不会被AutoHotkey脚本发出的键击行为触发。这样避免了发生热字串反复触发导致无限循环的可能。
在某些方面来说 输入(Input) 命令比热字串更加灵活。例如,它允许在激活窗口中键击的不可见(例如游戏)。它还支持像Escape键这样的非字符式结束键。
所有包含热字串的脚本都将自动使用 键盘钩子(keyboard hook)。
热字串和热键的相同反应:
- 它们都会受到 中断(Suspend) 命令的影响;
- 都服从 #MaxThreads 和 #MaxThreadsPerHotkey (除了#MaxThreadsBuffer)的设置;
- 含有热字串的脚本都将自动 持续(persistent);
- 非自动扩展类的热字串运行时将会创建新 线程(thread),此外它们还将更新内建的热键变量,例如 A_ThisHotkey 。