CodeMirror 快捷键映射

CodeMirror 发布时附带了 EmacsVimSublime-Text等类型的快捷键配置。

键可以通过名称和字符来识别。 CodeMirror.keyNames定义了常用的快捷键。例如,定义的名称:Enter, F5, 和 Q。这些可以添加前缀hift-, Cmd-, Ctrl-, Alt-,例如,组合起来:Shift-Ctrl-Space

示例:按下Tab键时,插入空格代替tab字符。

editor.setOption("extraKeys", {
  Tab: function(cm) {
    var spaces = Array(cm.getOption("indentUnit") + 1).join(" ");
    cm.replaceSelection(spaces);
  }
});

或者,也可以使用单引号包围的字符,如 ‘$’‘q’。由于浏览器触发键盘事件方式的限制,有时候不能添加前缀。

要绑定多个快捷键,可以通过使用空格分隔键名,如 Ctrl-X Ctrl-V。当快捷键映射包含多个快捷键或不是在默认顺序(Shift-Cmd-Ctrl-Alt)中指定的前缀,那就要在使用前调用CodeMirror.normalizeKeyMap。此函数接受带前缀的键盘映射参数,并修改为自定义的前缀顺序(可以识别多个快捷键)。此函数返回快捷键本身。

快捷键映射的属性值,可以是一个带CodeMirror实例作为参数的函数字符串,或者false。字符串表示命令(Commands);如果设置为false,那么CodeMirror会将键交给浏览器处理;快捷键处理函数可以返回CodeMirror.Pass,这表示此函数不会处理按键,其它处理函数(或默认动作)依次得到此按键消息。(A key handler function may return CodeMirror.Pass to indicate that it has decided not to handle the key, and other handlers (or the default behavior) should be given a turn.)

快捷键映射中,当添加了Shift前缀时(如:”Up”: “goLineUp”,会匹配”Up”和”Shift-Up”), 以go字符开头的命令名称或具有motion属性(用于光标移动动作)的函数会被触发。这用于实现使用Shift选择。

快捷键映射可以通过定义fallthrough属性,这表示如果在映射内未找到按键定义,那么会在其它的映射中查找。

如果快捷键映射需要在激活时开始某动作,或在取消激活时停止某动作,那么它可以包含attachdetach属性。此属性的函数参数为CodeMirror实例和下一个或前一个键映射。注意:这只对顶级映射有效( top-level keymap),而对通过fallthroughextraKeysaddKeyMap添加的映射无效。