CodeMirror中文说明文档

文档大纲

本文档并未完全翻译完成,我需要你的帮助。前往GitHub编辑

按键表

按键表通过为鼠标或按键绑定函数来实现相应的功能。

CodeMirror 的发行版中包含 EmacsVimSublime Text 风格的按键表。

可以使用按键名或编号来指定按键。 CodeMirror.keyNames 对象定义了常用的按键名和按键 ID,如 EnterF5Q 等, 可以增加 Shift-Cmd-Ctrl-Alt- 等前缀,如 Shift-Ctrl-Space

案例,使用 Tab 键插入空格:

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

也可以使用单个字符来指定按键,如 '$''q',但由于按键事件是由浏览器触发的,所以该方法不能为按键增加前缀。

使用 LeftClickMiddleClickRightClick 来绑定鼠标按键。
鼠标按键也可以增加前缀,在 Click 之前可以增加 DoubleTriple(如 LeftDoubleClick )。
鼠标按键的处理函数的第二个参数是点击的位置。

用空格把多个按键名分开后可以形成组合键,如 Ctrl-X Ctrl-V
当按键表包含组合键或特殊前缀时(非 Shift-Cmd-Ctrl-Alt),必须在使用之前调用 CodeMirror.normalizeKeyMap 函数, 该函数会调整按键表的前缀顺序并识别组合键,参数为按键表,返回值是调整后的按键表。

CodeMirror.keyMap 对象包含已经定义的按键表,用户定义的按键表需要添加到该对象中,因为在根据名字查找按键表时会检查该对象。
该对象包含 "default" 按键表。

按键表中按键的值:

函数:只有一个参数,CodeMirror 实例。返回 CodeMirror.Pass 时表明不再处理该按键事件。
字符串:参考commands
false:把按键事件的处理交给浏览器。

按键的值是以 "go" 开头的命令或有 motion 参数(一般用于移动光标)的函数时, 按键即使带有 Shift 前缀,也会被触发(如:"Up": "goLineUp" 会同时触发 up 和 shift-up 事件), 这是为了简化 shift-selection 。

按键表可以定义 fallthrough 属性来应对,没有在当前按键表中找到按键时,可以前往哪几个按键表中继续查找按键。
该属性可以是单个按键表名或由多个按键表名组成的数组。

如果按键表需要在创建或销毁时处理一些事情,可以为按键表添加 attachdetach 属性, 其对应值为函数,函数的参数包括编辑器实例、上一个、下一个按键表。
注意:该属性只对 top-level 按键表有效, 对 fallthrough 中的按键表和通过 extraKeysaddKeyMap 添加的按键表无效。