# 输入字符串触发器

输入字符串触发器主要包括以下几个部分：

<figure><img src="https://cdn.jsdelivr.net/gh/wuzimuws/imgbed@main/img/202403272150449.png" alt=""><figcaption></figcaption></figure>

### 1. 可输入的内容

输入字符串触发器允许您使用更详细（因此更具描述性）的按键序列来触发宏。触发器可以包含非 ASCII 字符，但您应该验证删除在这些情况下是否正常工作。触发器可以包含修饰符 (⌃⌥⇧⌘) 字符 (v11.0+)，您可以通过点击相应的修饰符来输入这些字符。

### 2. 选择大小写是否敏感

![](https://cdn.jsdelivr.net/gh/wuzimuws/imgbed@main/img/202403280928767.png)

* 大小写必须匹配

> **解释：** 这句话写的很难读，对于`=em=`来说，只能输入`=em=`才能触发，`=Em=`、`=eM=`、`=EM=`都无法触发。

* 大小写都可以
* 大小写影响动作
  * 您可以使用键入的字符串的大小写并影响插入文本操作。这意味着如果您以全大写形式键入字符串，则生成的“插入文本”也将是大写的。如果您仅以大写形式键入第一个字母，则仅第一个结果插入文本将为大写。
    * > **解释：** 这句话写的很难读，举个例子就容易理解了： &#x20;

      <div data-full-width="true"><figure><img src="https://cdn.jsdelivr.net/gh/wuzimuws/imgbed@main/img/202403281005250.png" alt=""><figcaption></figcaption></figure></div>

      <figure><img src="https://cdn.jsdelivr.net/gh/wuzimuws/imgbed@main/img/202403281004524.gif" alt=""><figcaption></figcaption></figure>

      > 其中第一个输入的是`#em`，
      >
      > 第二个输入的是`#Em`，&#x20;
      >
      > 第三个输入的是`#EM`。
* 使用正则表达式来匹配触发器
  * 您可以使用正则表达式来匹配触发器。触发器与输入序列的末尾进行匹配，因此正则表达式的末尾有一个隐式 z。请注意，尝试将末尾的分词符与 [\b 或某种正或负的先行断言匹配](https://www.runoob.com/regexp/regexp-metachar-b.html)是没有用的，因为输入序列始终以当前字符结束。例如，即使您计划输入的下一个字符是“o”，“ellb”也会匹配“hell”。
  * 如果多个输入字符串触发器从末尾开始匹配（例如“hello”和“llo”），则将使用最长的一个。如果存在多个具有相同长度的匹配项（如果使用大小写或变音符号选项，则可能会发生这种情况），将显示冲突浮窗，提供匹配宏的选择。在这种情况下，如果所有键入的字符串触发器都启用了“执行前模拟 N 次删除”选项，则将立即模拟删除，然后显示冲突浮窗；否则将不会模拟删除。
  * 具体可参考[RegEX](https://wiki.keyboardmaestro.com/Regular_Expressions?s\[]=regular\&s\[]=expression)。

### 3. 后续接的内容种类

![](https://cdn.jsdelivr.net/gh/wuzimuws/imgbed@main/img/202403281041435.png)

* 位于任何字符之后可触发
* 位于分词符之后可触发
  * 您可以将键入的字符串触发器限制为仅在断字后起作用（这意味着任何非字母数字字符，或取消上述序列的任何情况）。请注意，这意味着仅在您键入分词符、然后键入的字符串后才会发生匹配， - Keyboard Maestro 无法预知你未来会键入什么，所以它不能仅在你计划接下来键入一个词边界时才匹配字符串。这意味着，触发条件的检测只能在你实际完成键入动作之后进行，而不是基于你未来的键入计划。
    * > **解释：** 这一段也写得很难懂，举个例子吧，具要见下图：
      >
      > 第一行：前方无字符，可以触发&#x20;
      >
      > 第二行：前方为其他字符，不能触发&#x20;
      >
      > 第三行：前方为空格，可以触发&#x20;
      >
      > 所以，对于不会单独出现在字首的字符触发组合，可以用于触发器，像`th`这样的高频出现在词首的，应当避免当触发器，`em`也不适用，因为存在`email`、`empty`等以`em`开头的单词。

      <figure><img src="https://cdn.jsdelivr.net/gh/wuzimuws/imgbed@main/img/202403281056812.png" alt=""><figcaption></figcaption></figure>

      <figure><img src="https://cdn.jsdelivr.net/gh/wuzimuws/imgbed@main/img/202403281101754.gif" alt=""><figcaption></figcaption></figure>

简而言之，这个设置确保了只有在符合特定前置条件（即，词边界之后立即跟随触发字符串）的情况下，触发器才会被激活，从而提高了触发的准确性和适用性。

### 4. 是否适用变音字母

<figure><img src="https://cdn.jsdelivr.net/gh/wuzimuws/imgbed@main/img/202403281115840.png" alt=""><figcaption></figcaption></figure>

> Diacritical matter 是指 é、è、ê、ë 这类特殊符号，平时咱们用不到，可以不用考虑。

### 5. 模拟删除

由于按键首先进入当前应用程序，因此通常会在执行宏之前删除按键，尽管禁用此功能后您可以在很大程度上忽略按键的应用程序中使用它。

> **解释：** 在勾选的情况下，在输入`=em=`时，会模拟删除4个字符，以将`=em=`删除

### 6.`输入字符串触发器`的使用注意事项

#### 该触发器的适用场景——如何避免宏误触发

* ⚠️ 通常不应使在非文本输入上下文中使用模拟删除的`输入字符串触发器`，因为模拟的删除击键可能具有破坏性。
  * > **解释：** 最好在文本输入的位置使用该触发器，这样可以保证`Delete`删除键只对刚刚输入的文本进行删除，如果在文件操作时使用，则可能会造成文件删除的破坏性后果。
* 如果您要立即更改焦点（例如，提示用户输入，或者通过切换窗口或应用程序），那么您可能需要在宏开始时短暂暂停，以便在焦点发生变化之前保证模拟删除执行完毕。
  * > **解释：** 如果该`触发器`对应的`动作`需要变换窗口、焦点，则最好在第一个`动作`处设置一定的`Pause时间`，这样可以给`模拟删除`执行完毕留出足够的时间，如果不如此设置，可能导致：
    >
    > 1. 无法将之前的输入文本删除，
    > 2. 切换焦点之后再进行删除操作，可能会不正确地删除切换焦点后对应位置处的内容。
    >
    > 暂停的时间可以根据自己电脑的性能来合理设置。&#x20;

    <figure><img src="https://cdn.jsdelivr.net/gh/wuzimuws/imgbed@main/img/202403310957224.png" alt=""><figcaption></figcaption></figure>
* 为了避免宏意外触发，最好在字符串中包含一致的前缀和/或后缀。例如，要插入您的电子邮件地址，不要仅使用“em”（如果您输入“them”，则会触发），而应使用“=em=”之类的内容，这样您就不会意外输入。

#### 如何在输入过程中断触发器的触发

* 即使您使用删除键进行更正，键盘大师也会接受触发器（例如，在上面的情况下，如果您输入“=en«delete»m=”，触发器仍然会触发。如果您需要输入触发器没有宏触发的文本，输入并删除中间的 Shift-Space，例如“=e«Shift-Space»«delete»m=”。
  * > **解释：** 当输入一半时，有输入错误的字符，即使通过`Delete`进行了修改，仍会正常地触发宏，即会输出`them`。 如果不想触发该宏，则可以在输入一部分的情况下，按`Shift-Space`增加一个空格，再按`Delete`删除该空格，这样就不会触发该宏，即会输出`=em=`。
* 如上所述，输入 Shift-Space 将取消序列，任何控制键或命令键（例如 Command-.）、任何宏执行、切换应用程序、单击鼠标或超过几秒钟不输入都会取消序列。点击修饰符不会取消序列，但会被视为触发字符串的一部分 (v11.0+)。
  * > **解释：** 可以通过上述示例的操作，来中断宏序列。

### 如何查看键入的确切文本

您可以使用`%TriggerValue%` 文本Token来确定键入的确切文本。

### 不能查看`键入的确切文本`的情形

请注意，系统不允许 Keyboard Maestro Engine 查看在其自己的窗口中键入的键（例如`用户输入提示`或`自定义 HTML 提示`），因此键入的字符串触发器将无法在 Keyboard Maestro Engine 窗口中工作。另请注意，类型化字符串触发器在 Keyboard Maestro 编辑器本身中无法正常工作，因为对宏的任何更改都会导致宏被保存并重置类型化字符串触发器缓冲区。因此，您需要使用不同的触发器在 Keyboard Maestro 引擎或编辑器中工作。

系统也将（正确地）不允许 Keyboard Maestro 查看在密码字段中键入的键，因此如果您在大多数密码字段中键入字符串触发器，则不会触发它们。您可以使用“通过键入插入文本”在密码字段中输入内容（尽管这是一个严重的安全问题，并且在某些情况下它无法正常工作），但在密码字段内无法使用“键入字符串”触发器。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://km.qxpai.cn/chu-fa-qi-trigger/shu-ru-zi-fu-chuan-chu-fa-qi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
