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 添加的按鍵表无效。