# 快捷鍵

本頁列出 `MDEditor` 攔截的所有按鍵組合，以及 `hotKey` 選項影響的範圍。

## 組合鍵判定

`editorKeydown` 把按鍵轉成字串後查表：`metaKey` 或 `ctrlKey` 都記為 `cmd+`，再接 `shift+`，最後是 `event.key` 轉小寫。所以 macOS 的 `Cmd` 與 Windows／Linux 的 `Ctrl` 行為相同。

## 格式化快捷鍵（`hotKey: true` 時）

| 組合鍵 | 方法 |
|---|---|
| `Cmd/Ctrl+B` | `bold()` |
| `Cmd/Ctrl+I` | `italic()` |
| `Cmd/Ctrl+Shift+X` | `strikethrough()` |
| `Cmd/Ctrl+U` | `underline()` |
| `Cmd/Ctrl+M` | `marker()` |
| `Cmd/Ctrl+K` | `code()` |
| `Cmd/Ctrl+↑` | `sup()` |
| `Cmd/Ctrl+↓` | `sub()` |

快捷鍵觸發時事件帶有修飾鍵，因此插入的是 HTML 標籤（如 `<b></b>`）而不是 Markdown 記號，見 [格式化方法](/editor-formatting)。

## 編輯鍵（一律生效）

| 按鍵 | 動作 |
|---|---|
| `Cmd/Ctrl+Z` | `undo()` |
| `Cmd/Ctrl+Shift+Z` | `redo()` |
| `Cmd/Ctrl+A` | `selectAll()`，只選編輯器內容 |
| `Cmd/Ctrl+S` | `save()`，見 [內容與檔案](/editor-content) |
| `Tab` | `indent()`：在游標處插入 4 個空白 |
| `Cmd/Ctrl+]` | `rowIndent()`：在選取的每一列開頭插入 4 個空白 |
| `Enter` | `wrap()`：在游標處分割成兩列 |
| `Backspace` | `backspace()`：刪除選取範圍、前一個字元，或在列首時與上一列合併 |
| `F5`、`Cmd/Ctrl+R` | 攔截，不重新整理頁面 |

## 預設行為

- 表中生效的組合鍵都會阻止預設行為，瀏覽器的原生行為（例如 `Cmd+B`、`Cmd+S` 另存網頁）不會發生
- 未列在表中的按鍵維持瀏覽器預設，由 `contentEditable` 處理
- `Cmd`／`Ctrl` 單獨按下不做任何事
- `F5` 與 `Cmd/Ctrl+R` 只有在焦點位於編輯器時被攔截；要在整頁攔截需設 `preventRefresh: true`

## 停用格式化快捷鍵

```javascript
new MDEditor({ id: "editor", hotKey: false });
```

`hotKey: false` 只停用上方「格式化快捷鍵」表，編輯鍵仍然有效。被停用的組合不再被攔截，會回到瀏覽器對 `contentEditable` 的預設行為（例如 `Cmd/Ctrl+B` 可能由瀏覽器直接套用粗體 DOM），不會經過 NanoMD 的復原紀錄。
