循环引用会导致 AutoHotKey 出错吗?

Can circular references cause errors in AutoHotKey?

我写了我的第一个 AutoHotKey 脚本,但是这部分似乎有错误:

^;::Send ^z ; Undo
^q::Send ^x ; Cut
^j::Send ^c ; Copy
^k::Send ^v ; Paste
^x::Send ^+v ; Paste without formatting

我无法让 Cut 工作(第 2 行)。

问题是什么?

如果我注释掉第 5 行,那么 Cut 就可以了。但是,我从来没有让他们同时工作。第 1 行的分号 (;) 是否造成问题?

发生这种情况是因为按下 Ctrl+Q 会触发 "cut" 热键,即按下 Ctrl+X,触发 "paste without formatting" 热键,按下 Ctrl+Shift+V.

所以文本处理器收到

  1. Ctrl+X(剪切)和
  2. Ctrl+Shift+V(无格式粘贴),

只清除文本格式。


幸运的是,有一个简单的修复方法:$ 热键前缀。来自 docs:

The $ prefix forces the keyboard hook to be used to implement this hotkey, which as a side-effect prevents the Send command from triggering it.

您只需要在 Send 可以触发的热键前加上 $

^;::Send ^z ; Undo
^q::Send ^x ; Cut
^j::Send ^c ; Copy
^k::Send ^v ; Paste
$^x::Send ^+v ; Paste without formatting

您的问题确实是由热键触发其他热键引起的,可以使用 $ 修饰符修复,如其他答案中所述,但我建议您只使用 nice and easy remapping syntax 像这样:

^;::z ; Undo
^q::x ; Cut
^j::c ; Copy
^k::v ; Paste
^x::+v ; Paste without formatting