很多人第一次用热字符串,都是从 ::btw::by the way 这种缩写替换开始的。这个用法很直观,也确实好用。但如果只把热字符串理解成“输入几个字母,替换成一段文字”,就有点可惜了。
在 v1 里,热字符串更像一个轻量的输入触发器。它可以补全短语、修正格式、根据后续输入决定动作,甚至配合正则思路做一些动态文本处理。只要不把它写得太玄,它会比很多复杂窗口工具更贴近日常输入场景。
先从普通替换开始
最普通的热字符串适合放常用短语、邮箱、地址、固定回复。这个阶段不需要追求复杂,先让自己少敲重复内容。
#Requires AutoHotkey v1.1 ::addr::广西南宁市某某路 ::mail::example@qq.com ::sig::祝好,`nAHK66
这里要注意一个复制体验:如果替换内容里有换行,可以用 `n。如果内容很长,后面就该考虑函数、文件读取,或者用菜单管理,不一定要把一大段文字全塞进一行热字符串。
用选项控制触发方式
热字符串前面的选项很关键。比如 * 表示不用结束符也能触发,? 表示可以在其他字符后触发,C 表示区分大小写。
:*:btw::by the way :?:qq::QQ :C:ID::Identity
选项不是越多越好。我的习惯是:普通短语少加选项,只有明确需要“立即触发”或“大小写敏感”时才加。否则脚本越写越久,后面很容易出现某个热字符串抢先触发,影响另一个热字符串的情况。
条件热字符串:等用户再按一个键
Jack 原文里有一个很实用的思路:当一个热字符串会挡住另一个热字符串时,可以不用硬拼规则,而是用 Input 临时等待后续输入。
比如我输入新行后的小写 t,想自动变成大写 T,但又希望 tn 仍然能展开成 Thanks。这时可以在触发 t 后,短暂等待用户是否继续输入 n。
:T:tn::Thanks
:C*?:`nt::
SendInput, `nT
Input, UserInput, T5 L1 C, , n
if (UserInput = "n")
SendInput, hanks
return
这段代码的意思是:用户在新行输入 t 后,脚本先输出大写 T,然后等待 5 秒,看下一个字符是不是 n。如果是,就补上 hanks,最终得到 Thanks。
这个技巧适合解决“上下文相关”的输入问题。它不适合滥用,因为等待输入会让逻辑变复杂,但遇到热字符串互相影响时,它比继续堆规则更清楚。
用函数处理动态内容
热字符串后面可以接标签或函数。只要进入脚本逻辑,就不再局限于固定文本。下面这个例子把 ;now 展开成当前时间。
::;now:: FormatTime, now,, yyyy-MM-dd HH:mm:ss SendInput, %now% return
这类写法很适合日期、编号、随机字符串、模板内容。热字符串只负责“触发”,真正的内容由脚本现场生成。
重复短语的小技巧
如果经常需要把一段短语重复几次,可以用一个小函数模拟“动态热字符串”。下面的例子不是完整的正则热字符串库,而是一个更容易理解的版本:选中文本后按热键,输入次数,脚本自动重复。
^!r::
oldClip := ClipboardAll
Clipboard := ""
SendInput, ^c
ClipWait, 1
if ErrorLevel
{
Clipboard := oldClip
return
}
InputBox, count, 重复次数, 要重复几次?,, 220, 130
if ErrorLevel
{
Clipboard := oldClip
return
}
text := Clipboard
out := ""
Loop, %count%
out .= text . (A_Index = count ? "" : " ")
Clipboard := out
SendInput, ^v
Sleep, 100
Clipboard := oldClip
return
如果以后要做得更像 Jack 原文里的正则热字符串,可以再引入 RegExHotstrings() 这类函数库。但对大多数站内用户,我更建议先理解这个朴素版本:输入触发、读取内容、处理内容、再输出。
不要让热字符串变成一团
热字符串写多以后,最常见的问题不是“不会写”,而是“太多了”。我一般会按用途分段:
- 固定文本:邮箱、地址、签名、常用回复。
- 格式修正:大小写、标点、常见错字。
- 动态内容:日期、编号、模板、剪贴板处理。
- 临时输入:用
Input等待后续按键的特殊场景。
每一类之间留注释,命名保持规律。越常用的热字符串越要简单,越特殊的热字符串越要写清楚原因。否则过几个月回来看,自己都不知道当初为什么这么写。
什么时候不该用热字符串
热字符串适合“输入时顺手触发”。如果内容需要选择、搜索、分类、预览,那就别硬塞进热字符串里了,可以改用菜单、GUI、ListView 或搜索框。热字符串越轻,越好用;越像一个小型程序,越容易反过来影响输入体验。
我的建议是:固定替换用普通热字符串;需要计算用标签或函数;遇到上下文问题再考虑 Input;需要大规模动态匹配时,再研究正则热字符串。这样一路加上去,脚本会稳很多。

评论(0)