如何让 AutoHotKey 忽略前面有句点的热字符串?

如何让 AutoHotKey 忽略前面有句点的热字符串?

我有一个 AutoHotKey 脚本,可以将缩写扩展为完整的单词或短语,但今天我遇到了一个问题。我想将其添加org为“organization”的热字符串,但意识到在输入网页时,wikipedia.org它会显示wikipedia.organization。我的想法是添加一行,例如

::.org:: return

因此,如果我正在编写 .org 地址,它会退出脚本,但 org 本身仍然可以工作。但是,上述尝试不起作用(仍然输出“organization”)。我猜是因为它.是 AHK 代码的一部分,所以它没有将其视为热字符串的一部分。我以为我可以通过输入普通转义字符`(反引号)来转义它,但这也不起作用。

搜索 AHK 文档没有找到任何有用的信息,主要是因为“点”和“句号”都指标点符号以外的主题,因此不是一个有用的搜索词。

有什么方法可以让它工作吗?

答案1

为什么不完全避免冲突,让所有热字符串都以不常见的字符开头呢?我使用 nc某物或 kb某物,取决于它是哪个“家族”*。
故意使用在英语中永远不会成为单词开头的字母。
你甚至可以使用 §某物等等,但是像 $ 这样的常见符号不起作用。

即使像“k”这样的单个字母代表“键盘”,也能为您kcom提供一个简单的结构。[我的 nc 代表“notecard”,即以前复制粘贴的信息转储,kb 代表“键盘”。]

*不过,说实话,我大部分时间并不用它来扩展单个单词,因此即使添加两个字符,我仍然节省了相当多的打字时间。

答案2

我自己没能让它工作,但也许你可以使用其中一个正则表达式热字符串库(例如RegEx热字符串或者RegEx 动态热字符串) 仅匹配org而不匹配.org

正则表达式将会是这样的^(?!\.)org

答案3

搞清楚了。显然.是 AHK 的“结束字符”之一,就像SpaceEnter(表示热字符串结束并触发相应响应的字符)。显然,这意味着写入wikipedia.org没有触发.org应该退出脚本的部分,因为它将其视为 2 个输入,wikipediaorg,从而触发 的替换org。解决方案如下:

#Hotstring B0
:?:.org:: 
return
#Hotstring B

据我理解,该:?:符号表示热字符串可以作为另一个单词的一部分出现,从而使其能够将 视为和.的一部分,在这种情况下, 的全部会触发脚本的退出。/包装器可防止它在退出前退格字符。此代码需要位于脚本中其他热字符串的上方,以便该语句可以在其他热字符串执行之前退出脚本。wikipediaorg.org#Hotstring B0#Hotstring B.orgreturnorg

相关内容