codemirror 默认 TAB 键是支持缩进的, 但在没有选择文本时, 缩进是一个 Tab 键而不是 indexUnit 对应的空格数. 默认也不支持 Shift - Tab 往回缩进, 这个在排版文本是非常麻烦的. 为了解决这两个问题我们需要重新定义这两个快捷键的实现, 具体伪代码如下:
{ // 此对象为 codemirror 配置选项对象, 下面仅对选项的快捷键相关部分做说明 extraKeys: { Tab: (cm) => { if (cm.somethingSelected()) { // 存在文本选择 cm.indentSelection('add'); // 正向缩进文本 } else { // 无文本选择 //cm.indentLine(cm.getCursor().line, "add"); // 整行缩进 不符合预期 cm.replaceSelection(Array(cm.getOption("indentUnit") + 1).join(" "), "end", "+input"); // 光标处插入 indentUnit 个空格 } }, "Shift-Tab": (cm) => { // 反向缩进 if (cm.somethingSelected()) { cm.indentSelection('subtract'); // 反向缩进 } else { // cm.indentLine(cm.getCursor().line, "subtract"); // 直接缩进整行 const cursor = cm.getCursor(); cm.setCursor({line: cursor.line, ch: cursor.ch - 4}); // 光标回退 indexUnit 字符 } return ; }, } }