You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同时使用AutoHotkey热键与热字符串:_t输出异常问题求解

解决AutoHotkey热键与热字符串的冲突问题

这个问题其实挺常见的——你的原代码里,t::s是一个普通热键,只要按下t就会立刻触发替换,完全不管你接下来输入什么字符。所以当你输入_t时,t刚被按下就被换成了s,最后就变成了_s,而_t的热字符串根本没机会触发(因为输入流里已经没有_t这两个连续字符了)。

下面给你两种靠谱的解决方案:

方案1:把t的替换改成带单词边界的热字符串

这是最简单的方法,通过热字符串的选项限制t的触发条件,让它只在t是单独字符(或单词边界)时才替换:

:*B0:t::s
:*:_t::T

解释一下选项含义:

  • :*:不需要按空格、回车这类结束键,输入后立即触发替换
  • B0:匹配单词边界,意思是t必须是单独的字符,或者处于单词的开头/结尾(比如前后是空格、标点、行首/行尾)才会触发。这样_t里的t属于连续字符的一部分,就不会触发这个替换,_t的热字符串就能正常工作了。

方案2:给热键t::s添加上下文判断

如果你更习惯用热键而非热字符串,可以给t::s加上条件判断,只有符合“单独输入t”的场景才执行替换:

$t::
; 判断前一个按键是空白、行首,且没有按下Shift/Ctrl/Alt这类修饰键
if (A_PriorKey = " " || A_PriorKey = "" || A_PriorKey = "`n" || A_PriorKey = "`t") 
&& !GetKeyState("Shift", "P") && !GetKeyState("Ctrl", "P") && !GetKeyState("Alt", "P")
{
    SendInput s
}
else
{
    ; 不符合条件就直接发送原字符t
    SendInput t
}
return

:*:_t::T

这里的$前缀很关键,它能防止脚本发送的t再次触发这个热键,避免出现循环替换的问题。

内容的提问来源于stack exchange,提问作者Name

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:45:50