按键表通过为鼠标或按键绑定函数来实现相应的功能。
CodeMirror 的发行版中包含 Emacs、Vim 和 Sublime Text 风格的按键表。
可以使用按键名或编号来指定按键。
CodeMirror.keyNames
对象定义了常用的按键名和按键 ID,如 Enter
、F5
、Q
等,
可以增加 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'
,但由于按键事件是由浏览器触发的,所以该方法不能为按键增加前缀。
使用 LeftClick
、MiddleClick
和 RightClick
来绑定鼠标按键。
鼠标按键也可以增加前缀,在 Click
之前可以增加 Double
、Triple
(如 LeftDoubleClick
)。
鼠标按键的处理函数的第二个参数是点击的位置。
用空格把多个按键名分开后可以形成组合键,如 Ctrl-X Ctrl-V
。
当按键表包含组合键或特殊前缀时(非 Shift-Cmd-Ctrl-Alt
),必须在使用之前调用 CodeMirror.normalizeKeyMap
函数,
该函数会调整按键表的前缀顺序并识别组合键,参数为按键表,返回值是调整后的按键表。
CodeMirror.keyMap
对象包含已经定义的按键表,用户定义的按键表需要添加到该对象中,因为在根据名字查找按键表时会检查该对象。
该对象包含 "default"
按键表。
按键表中按键的值:
CodeMirror.Pass
时表明不再处理该按键事件。false
:把按键事件的处理交给浏览器。按键的值是以 "go"
开头的命令或有 motion
参数(一般用于移动光标)的函数时,
按键即使带有 Shift
前缀,也会被触发(如:"Up": "goLineUp"
会同时触发 up 和 shift-up 事件),
这是为了简化 shift-selection 。
按键表可以定义 fallthrough
属性来应对,没有在当前按键表中找到按键时,可以前往哪几个按键表中继续查找按键。
该属性可以是单个按键表名或由多个按键表名组成的数组。
如果按键表需要在创建或销毁时处理一些事情,可以为按键表添加 attach
和 detach
属性,
其对应值为函数,函数的参数包括编辑器实例、上一个、下一个按键表。
注意:该属性只对 top-level 按键表有效,
对 fallthrough
中的按键表和通过 extraKeys
或 addKeyMap
添加的按键表无效。