# App 规则

> 让某个键在特定 App 中执行不同的动作，按前台 App 的精确 Bundle ID 匹配。

---

LLMS 索引： [llms.txt](/zh/llms.txt)

---

App 规则让一个键在特定 App 位于前台时执行不同的动作，而不影响它在其他地方的行为。

## 规则如何匹配 {#matching}

每条映射都有一个「默认动作」，并可以带一组「App 规则」。按下组合键时，Capslock 用前台
App 自上而下地检查这些规则，第一条包含该 App 的规则生效；如果都不匹配，就执行默认动作。

App 以精确的 Bundle ID 识别，例如 `com.apple.Safari`。即使 App 被移动或改名，规则依然
有效，也绝不会误匹配名称相近的其他 App。

## 添加规则 {#add}

从某个键开始：

1. 在「键盘」页点按该键，再点「编辑…」。
2. 在「App 规则」下点击「添加 App 规则」。
3. 在「适用于」下点击「添加 App」，选择一个或多个 App。
4. 选择在这些 App 中执行的动作，然后保存。
{.steps}

也可以在「App 规则」页点击「添加规则…」，选好 App 后，映射编辑器会自动填入该 App。
如果 App 尚未安装，可以直接输入它的 Bundle ID，而不用浏览选择。

用规则旁的箭头调整顺序。每条规则至少要包含一个 App。

## 「App 规则」页 {#apps-page}

「App 规则」页列出所有设置了规则的 App，标出其中未安装的，并显示每条规则。在某个 App 的
菜单中，可以为它再添加规则，或「移除全部规则」。移除某个 App 的全部规则是一次修改：会先
备份，并且可以撤销。

## 在配置文件中 {#yaml}

规则是映射上的一条 `bindings`。下面这条让 `⇪ N` 在其他地方照旧用 ⌥⌫ 删除前一个词，
但在终端和 iTerm 中改为发送 Shell 习惯的 ⌃W：

```yaml
- trigger:
    kind: hyper_plus_key
    key: 78            # N
    plane: 0           # Base
  action:
    kind: key_combo
    target_key: 8      # Backspace
    with_alt: true
  bindings:
  - when:
    - type: frontmost_app
      include:
      - com.apple.Terminal
      - com.googlecode.iterm2
    action:
      kind: key_combo
      target_key: 87   # W
      with_ctrl: true
```

编辑器无法显示的规则会标为「高级规则（在 YAML 中编辑）」，并原样保留。见
[配置文件](/zh/docs/reference/configuration/)。

---

反链：

- [键盘编辑器](/zh/docs/guide/editor/)
- [配置文件](/zh/docs/reference/configuration/)
