Skip to content

案例:Tab 处理

默认情况下,CodeMirror 不处理 Tab 按键。这不是疏忽,根据 W3C《网页内容无障碍指南》中无键盘陷阱,刻意设计成这样。

一些用户浏览网页不喜欢使用点击设备,添加 Tab 对于这类用户很不友好,因为一旦聚焦输入框后便无法在退出输入框。

当然,我理解朋友们期待在代码编辑器中可以用Tab 键控制缩进相关的事情。想要实现这个目标,CodeMirror 设置一个逃脱出口:如果你按 Escape + Tab 键,编辑器则不会处理 Tab,以便于你可以移动聚焦到下一个元素。不幸的是,因为 CodeMirror 没有设置帮助功能(可能也不应该知道,毕竟CodeMirror只是一个组件,不是一个应用程序),用户不会知道这一点。

所以如果真的想要绑定 Tab 键,请在您的文档开始的地方确保提示了用户这个逃脱出口。下面,你可以给 Tab 绑定一些指令了,或者直接使用 commands 包中的 indentWithTab

javascript
import { basicSetup } from "codemirror"
import { EditorView, keymap } from "@codemirror/view"
import { indentWithTab } from "@codemirror/commands"
import { javascript } from "@codemirror/lang-javascript"

const doc = `if (true) {
  console.log("okay")
} else {
  console.log("oh no")
}
`

new EditorView({
  doc,
  extensions: [
    basicSetup,
    keymap.of([indentWithTab]),
    javascript()
  ],
  parent: document.querySelector("#editor")
})

Last updated: