很多人第一次用热字符串,都是从 ::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;需要大规模动态匹配时,再研究正则热字符串。这样一路加上去,脚本会稳很多。

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。