CodeMirror中文说明文档

文档大纲

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

API调用

CodeMirror 的大部分功能只能用过 API 来调用,因此需要编写代码(或者使用插件)来暴露给用户。

API 使用含有 linech 属性的对象来代表编辑器中的位置,两个属性的值都从 0 开始。
CodeMirror 能确保传递的任意坐标都在文档中,所以不用太担心坐标问题。 如果 chnull 或未定义,会用该行的长度来代替。
该对象可能包含 sticky 属性,值为 "before""after", 表示该位置与前面的字符相关还是与后面的字符相关,比如,用来表示光标应在换行符前还是换行符后。

doc. 开头的函数既可通过 CodeMirror 的实例调用,也可通过 CodeMirror.Doc 的实例调用。 但是以 cm. 开头的函数只能通过 CodeMirror 的实例调用。

构造函数

使用 CodeMirror(place: Element|fn(Element), ?option: object) 构造函数来创建编辑器实例。

place:为 DOM 元素时,在该元素后创建;为函数时,通过该函数来放置编辑器。
options:是可选的配置对象。默认从 CodeMirror.defaults 中获取。

注意:构造函数的 options 参数是可修改的,所以你不能共享该参数给其他实例。

参考另一种创建编辑器实例的方法:CodeMirror.fromTextArea

正文处理

doc.getValue(?separator: string) → string
获取正文。可用指定字符串来分割行(默认为 "\n")。
doc.setValue(content: string)
设置正文。
doc.getRange(from: {line, ch}, to: {line, ch}, ?separator: string) → string
获取指定范围内的正文。可用指定字符串来分割行(默认为 "\n")。
doc.replaceRange(replacement: string, from: {line, ch}, to: {line, ch}, ?origin: string)
使用字符串替换从 fromto 之间的正文,fromto 必须是 {line, ch} 对象, 省略 to 参数时,将字符串插入到 from 处。
指定 origin 时,该参数会传递给 "change" 事件, 并根据该参数的第一个字符来确定是否与上一个历史事件合并,详见选区的 origin 属性。
doc.getLine(n: integer) → string
获取第 n 行的正文。
doc.lineCount() → integer
获取总行数。
doc.firstLine() → integer
获取第一行的行号。一般返回 0,但如果是子视图或是首行非 0 的文档时,可能返回其他值。
doc.lastLine() → integer
获取最后一行的行号。一般返回 doc.lineCount() - 1,但如果是子视图,可能返回其他值。
doc.getLineHandle(num: integer) → LineHandle
获取某行的句柄。
doc.getLineNumber(handle: LineHandle) → integer
使用行句柄获取行号(该行不存在时返回 null)。
doc.eachLine(f: (line: LineHandle))
doc.eachLine(start: integer, end: integer, f: (line: LineHandle))
遍历所有行,或遍历从 startend 之间的行,f 函数的参数是行句柄。
使用该方法来获取指定范围内的行句柄比使用 getLineHandle 函数的效率更高。
注意:行句柄包含 text 属性,为该行的正文字符串。
doc.markClean()
标记正文是 "clean" 的,该状态会一直保持到下次编辑时,可用来判断正文是否需要保存。
该函数与 changeGeneration 不同,后者支持多个子系统在不互相干扰的情况下跟踪多个 "clean" 状态。
doc.changeGeneration(?closeEvent: boolean) → integer
该函数的返回值可以传递给 isClean 函数,用来判断从该次修改到现在,正文是否有修改。
If closeEvent is true, the current history event will be ‘closed’, meaning it can't be combined with further changes (rapid typing or deleting events are typically combined).
doc.isClean(?generation: integer) → boolean
返回正文是否是 "clean" 的。
参数为空时,从初始化或最后一次调用 markClean 函数到现在,正文是否有修改。
参数不为空时,从调用 changeGeneration 函数到现在,正文是否有修改。

光标和选区

doc.getSelection(?lineSep: string) → string
获取当前选区的正文。存在多个选区时,使用 lineSep 分割行。
doc.getSelections(?lineSep: string) → array<string>
获取所有选区的正文,返回值是由每行的正文组成的数组。
doc.replaceSelection(replacement: string, ?select: string)
用字符串替换选区的正文。
select
默认:取消选区,把光标移动到选区结尾处。
"around":为替换后的正文创建新选区。
"start":取消选区,把光标移动到选区开头处。
doc.replaceSelections(replacements: array<string>, ?select: string)
用数组中的字符串替换对应选区的内容,数组的长度应该与选区数一致。
select 参数与 replaceSelection 一致。
doc.getCursor(?start: string) → {line, ch}
获取主选区一端的坐标,返回值是 {line, ch} 对象。
可选 start 参数的值可以是 "from""to""head"(默认,扩展选区的截止处)或 "anchor"(扩展选区的起始处)。
doc.listSelections() → array<{anchor, head}>
获取当前的所有选区。返回结果已被排序且不会重叠(重叠的选区已被合并)。
anchorhead{line, ch} 对象。
doc.somethingSelected() → boolean
获取是否有正文被选中。
doc.setCursor(pos: {line, ch}|number, ?ch: number, ?options: object)
设置光标的坐标。既可以使用 {line, ch} 对象也可以使用两个单独的数字。
该函数会取消所有选区,并在指定坐标处创建一个空选区。
options 参数参考 setSelection
doc.setSelection(anchor: {line, ch}, ?head: {line, ch}, ?options: object)
创建一个选区。
anchorhead 参数的值是 {line, ch} 对象,head 默认与 anchor 一致。
options 的值如下:
scroll: boolean
是否将选区滚动到可视范围内。默认为 true。
origin: string
是否与前一个历史事件合并。
+ 开头时,如果跟前一个历史事件的 origin 相同, 并且间隔时间较短时,创建新的历史事件并覆盖前一个历史事件。
* 开头时,替换上一个历史记录(如果 origin 相同)。
移动操作的 origin"+move",用户输入的 origin"+input"
bias: number
当选区在原子标记内时,选区应在原子标记的哪一侧结束。
可以是 -1(后)或 1(前)。不指定时该值时,编辑器会基于选区的方向来防止该情况的出现。
doc.setSelections(ranges: array<{anchor, head}>, ?primary: integer, ?options: object)
创建一组新选区,数组至少包含一个选区。
primary 用来指定主选区,不指定时该值时,当上一组选区的数量与本组选区的数量一致时,该值从上一组选区中继承,否则为本组的最后一个选区。
options 参数参考 setSelection
doc.addSelection(anchor: {line, ch}, ?head: {line, ch})
额外增加一个选区,并作为主选区。
doc.extendSelection(from: {line, ch}, ?to: {line, ch}, ?options: object)
按下 Shift 键或启用 extending 时,扩展选区。
存在多个选区时,只保留主选区。
to 可选,用来确定截止范围。
options 参数参考 setSelection
doc.extendSelections(heads: array<{line, ch}>, ?options: object)
作用于所有选区的 extendSelection
doc.extendSelectionsBy(f: function(range: {anchor, head}) → {line, ch}), ?options: object)
使用指定的函数处理所有选区,并返回 extendSelections 函数的返回值。
doc.setExtending(value: boolean)
设置或取消 "extending" 状态,类似按下或弹起 Shift 键,extendSelection 函数依赖该状态。
doc.getExtending() → boolean
获取 "extending" 状态。
cm.hasFocus() → boolean
获取编辑器是否获得焦点。
cm.findPosH(start: {line, ch}, amount: integer, unit: string, visually: boolean) → {line, ch, ?hitSide: boolean}
获取光标水平移动后的坐标。
start{line, ch} 对象。
amount:数字(可能为负数)。
unit"char""column""word"
visually:为true时,在从右往左书写的语言中,移动是相对的而不是绝对的。
把光标水平移动 amountunit 单位。
移动到文档头或文档尾时,返回值会包含 hitSide 属性。
cm.findPosV(start: {line, ch}, amount: integer, unit: string) → {line, ch, ?hitSide: boolean}
findPosH 类似,垂直移动。
unit 可以是 "line""page"
cm.findWordAt(pos: {line, ch}) → {anchor: {line, ch}, head: {line, ch}}
获取指定坐标处的“单词”(一组字符、空白符或标点符号)的开始与结束坐标。

配置

cm.setOption(option: string, value: any)
修改配置。参考 配置
cm.getOption(option: string) → any
获取指定配置的值。
cm.addKeyMap(map: object, bottom: boolean)
添加按键表
插件一般使用该函数来添加按键表,可避免与 extraKeys 冲突。
使用该函数添加的按键表,比通过 extraKeyskeyMap 配置添加的按键表的优先级更高。
使用该函数后添加的按键表比先添加的按键表的优先级更高。
bottom 参数用来设置为最低级(仅相对于通过该函数添加的按键表)。
cm.removeKeyMap(map: object)
删除通过 addKeyMap 函数添加的按键表。
参数可以是按键表对象,也可以是按键表的 name
cm.addOverlay(mode: string|object, ?options: object)
添加高亮层。搜索插件使用该函数来高亮显示搜索结果。
mode 参考 mode 配置自定义 Mode
options 支持以下配置:
opaque: bool
默认为 false,启用时对高亮层应用指定 Mode,而不是两种 Mode 并存。
priority: number
用来确认应用哪一个高亮层,优先级更高的高亮层将被应用。默认为 0。
cm.removeOverlay(mode: string|object)
删除高亮层。
mode 参考 addOverlay
cm.on(type: string, func: (...args))
为编辑器的事件(字符串)绑定处理函数。
类似于 CodeMirror.on(object, type, func) 函数,为任意对象绑定处理函数。
cm.off(type: string, func: (...args))
删除编辑器的事件处理函数。
类似于 CodeMirror.off(object, type, func) 函数。

文档对象

每个编辑器实例只有一个 CodeMirror.Doc 对象。 文档对象由正文、选区、历史记录和 Mode 组成。
可以使用 CodeMirror.Doc(text: string, mode: Object, firstLineNumber: ?number, lineSeparator: ?string) 构造函数来创建文档对象, 后三个参数都是可选的,分别用来设置 Mode 、首行的行号(可大于 0)、行分隔符。

cm.getDoc() → Doc
获取文档对象。
doc.getEditor() → CodeMirror
获取文档对象对应的编辑器实例。可能返回 null
cm.swapDoc(doc: CodeMirror.Doc) → Doc
为编辑器绑定一个新的文档对象。返回老的文档对象。
doc.copy(copyHistory: boolean) → Doc
复制文档对象。copyHistory 为 true 时同时复制历史记录。不能通过编辑器实例调用该函数。
doc.linkedDoc(options: object) → Doc
创建一个与原文档对象保持连接的文档对象。在 unlinkDoc 之前,两个对象是同步的。
支持的配置如下:
sharedHist: boolean
为 true 时,同步两个对象的历史记录,在一个对象中操作可以在另一个对象中撤销,反之亦然。
from: integer
to: integer
可以用来创建子视图,只显示指定范围内的行。
注意:子视图的坐标与原坐标一致,比如子视图从第 10 行开始,子视图的首行行号是 10 ,不是 0 。
mode: string|object
新创建的文档对象默认继承父类的mode。该参数可以直接设置新对象的mode。
doc.unlinkDoc(doc: CodeMirror.Doc)
切断两个文档对象之间的连接,两个文档对象的历史记录将会被分开。
doc.iterLinkedDocs(function: (doc: CodeMirror.Doc, sharedHist: boolean))
遍历所有与之相连的文档对象,函数的第一个参数是相连的文档对象,第二个参数代表是否与原文档对象共享历史记录。

历史记录

doc.undo()
撤销编辑。
doc.redo()
重做编辑。
doc.undoSelection()
撤销选区或编辑。
doc.redoSelection()
重做选区或编辑。
doc.historySize() → {undo: integer, redo: integer}
返回 {undo, redo} 对象,代表可以撤销、重做的次数。
doc.clearHistory()
清除历史记录。
doc.getHistory() → object
获取历史记录(JSON 格式)。
doc.setHistory(history: object)
设置历史记录,格式必须与 getHistory 的返回值一致。
注意:如果编辑器的内容与调用 getHistory 时不同,会将造成无法预知的后果。

文本标记

doc.markText(from: {line, ch}, to: {line, ch}, ?options: object) → TextMarker
使用指定的 CSS 样式名来标记一段文本。
fromto{line, ch} 对象。
options 参数可选,支持的配置如下:
className: string
用来标记文本的 CSS 样式名。
inclusiveLeft: boolean
在标记文本左侧输入的内容是否应该纳入标记区域。
inclusiveRight: boolean
在标记文本右边输入的内容是否应该纳入标记区域。
selectLeft: boolean
光标能否在原子标记的左侧出现。对正常标记无影响。
selectRight: boolean
光标能否在原子标记的右侧出现。
atomic: boolean
把标记文本视为一个整体,光标不能出现在标记文本内。
还可以使用 selectLeftselectRight 来控制光标能否在原子标记的左侧和右侧出现, 如果没有指定 selectLeft(或 selectRight),则使用 inclusiveLeft(或 inclusiveRight)来控制。
collapsed: boolean
折叠标记文本。启用时自动设置为原子标记。
clearOnEnter: boolean
启用时,光标出现在标记文本中时自动删除标记。
一般用于替换文本的小部件,当用户想编辑时自动删除标记。
在自动删除时,会触发 "clear" 事件。
clearWhenEmpty: boolean
当标记文本为空时是否自动删除标记。默认为 true。
replacedWith: Element
使用 DOM 元素来代表折叠起来的标记或原子标记,该元素必须是行内元素(不能是块级元素)。
handleMouseEvents: boolean
当使用 replacedWith 时,判断是否需要捕获 DOM 元素的点击和拖拽事件。
默认为 false,不捕获。
readOnly: boolean
把标记文本设置为只读,直到被删除或通过 setValue 重置正文。
注意:添加只读的文本标记时会清空历史记录。
addToHistory: boolean
默认为 false,为 true 时,添加到历史记录中,可以撤销(删除)标记。
startStyle: string
为标记的最左侧添加 CSS 样式名。
endStyle: string
为标记的最右侧添加 CSS 样式名。
css: string
用来标记文本的 CSS 样式。例如:"color: #fe3"
attributes: object
把该对象中的属性添加到标记区域的DOM元素上。 不支持添加 classstyle 属性。
shared: boolean
当文档对象 连接 给其他对象时,可以设置为true来在所有对象中标记。 默认只在当前对象中标记。
该函数的返回是标记对象(CodeMirror.TextMarker),包含三个函数:
clear():删除标记。
find():返回标记的起止坐标({from, to}),标记被删除时返回 undefined
changed():标记被修改时(如 replacedWith),可以用该函数来刷新标记。
doc.setBookmark(pos: {line, ch}, ?options: object) → TextMarker
插入一个书签,在编辑时,书签会跟着左右两边的正文移动。
书签对象包含两个函数:
find():返回书签的坐标。
clear():删除书签。
支持的配置如下:
widget: Element
使用 DOM 元素代表书签(参考 markText 函数的 replacedWith 选项)。
insertLeft: boolean
默认地,光标在书签上时输入,将内容插入到书签的右侧。为 true 时插入到左侧。
shared: boolean
markText 函数的 shared 配置。
handleMouseEvents: boolean
markText 函数的 handleMouseEvents 配置。
doc.findMarks(from: {line, ch}, to: {line, ch}) → array<TextMarker>
获取指定范围内的所有书签和标记。
doc.findMarksAt(pos: {line, ch}) → array<TextMarker>
获取指定位置的所有书签和标记。
doc.getAllMarks() → array<TextMarker>
获取指定文档中的所有书签和标记。

小部件、侧边栏和样式

doc.setGutterMarker(line: integer|LineHandle, gutterID: string, value: Element) → LineHandle
为指定行的指定侧边栏(参考 gutters)设置值。
值为 null 时删除侧边栏,为 DOM 元素时出现在指定行的侧边栏处。
doc.clearGutter(gutterID: string)
删除所有的指定侧边栏(gutters)。
doc.addLineClass(line: integer|LineHandle, where: string, class: string) → LineHandle
为指定添加 CSS 样式。
line 可以是行号数字或行句柄。
where 指定添加到哪个元素上,可以是:
"text":正文,选区的上层。
"background":背景,选区的下层。
"gutter":侧边栏。
"wrap":表示折叠的元素。
class 是样式名。
doc.removeLineClass(line: integer|LineHandle, where: string, class: string) → LineHandle
删除某行的 CSS 样式。
line 可以是行号数字或行句柄。
where 可以是 "text""background""wrap"(同 addLineClass)。
class 为空时删除所有样式,非空时删除指定样式。
doc.lineInfo(line: integer|LineHandle) → object
返回指定行的行号、正文、标记。
返回值是 {line, handle, text, gutterMarkers, textClass, bgClass, wrapClass, widgets} 对象,
gutterMarkers 包含侧边栏的 ID 与其对应的 DOM 元素,
widgets 数组包含该行的所有 行内小部件
还有几个通过 addLineClass 函数添加的样式名。
cm.addWidget(pos: {line, ch}, node: Element, scrollIntoView: boolean)
添加一个绝对定位的DOM元素(node)到指定位置({line, ch})的右下方。
scrollIntoView 为 true 时,编辑器会确保该元素在可视区域内。
可以用 DOM 函数来删除小部件(如 removeChild 函数)。
doc.addLineWidget(line: integer|LineHandle, node: Element, ?options: object) → LineWidget
添加行内小部件,行内小部件是填满一整行的,在指定行底部出现的元素。
line 是行号数字或行句柄。
node 是代表行内小部件的 DOM 元素。
支持的 options 如下(全部默认为 flase):
coverGutter: boolean
是否覆盖侧边栏。
noHScroll: boolean
水平滚动时是否固定在最左侧。
above: boolean
是否出现在顶部。
handleMouseEvents: boolean
是否捕获小部件的点击和拖拽事件。
默认为false,将由浏览器捕获,或由绑定的处理函数捕获。
insertAt: integer
默认添加到其他小部件的底部。
该选项用来控制顺序(0 为最顶层,N 为第 N 个小部件的底部)。
注意:仅在创建时有用。
className: string
为小部件添加样式名。
注意:小部件元素包含以 "CodeMirror-" 开头的样式名,有可能会影响小部件的外观。
该函数的返回值包含 line 属性,指向小部件的所在行,还有下面两个函数:
clear()
删除小部件。
changed()
修改小部件的 DOM 元素并影响到高度时调用该函数,强制 CodeMirror 更新所在行的高度。

尺寸、滚动和定位

cm.setSize(width: number|string, height: number|string)
设置编辑器的宽高(覆盖 CSS 样式)。
widthheight 可以是数字(代表多少个像素)或 CSS 单位(如 "100%"), 任意一项为 null 时表示该项不做修改。
cm.scrollTo(x: number, y: number)
滚动编辑器到指定位置(像素),两个参数都可以是 nullundefined 代表不滚动。
cm.getScrollInfo() → {left, top, width, height, clientWidth, clientHeight}
获取滚动信息,{left, top, width, height, clientWidth, clientHeight} 对象包含当前的滚动位置,滚动区域的尺寸,可见区域的尺寸(不含滚动条)。
cm.scrollIntoView(what: {line, ch}|{left, top, right, bottom}|{from, to}|null, ?margin: number)
把指定位置滚动到可视范围内。
what
null:光标。
{line, ch}:坐标。
{left, top, right, bottom}:区域(像素,编辑器的坐标)。
{from, to}:两个坐标或两个区域。
margin 给指定区域增加上下间距(像素)。
cm.cursorCoords(where: boolean|{line, ch}, mode: string) → {left, top, bottom}
获取光标的坐标。
where
true:选区起始处的坐标。
false:选区截止处的坐标。
{line, ch}:获取该处的坐标。
mode
"local":相对于文档左上角的坐标。
"page" 或 空值:相对于页面左上角的坐标。
"window":相对于窗口的当前可视区域(滚动的)左上角的坐标。
cm.charCoords(pos: {line, ch}, ?mode: string) → {left, right, top, bottom}
获取任意字符的坐标和尺寸。
cursorCoords 函数不同的是,该函数会返回字符的尺寸,而不是只有坐标。
cm.coordsChar(object: {left, top}, ?mode: string) → {line, ch}
基于 {left, top}(比如鼠标事件的坐标)获取对应的 {line, ch} 对象。
mode 是参考系,可以是 "window""page"(默认值)或 "local"
cm.lineAtHeight(height: number, ?mode: string) → number
用给的高度(像素)计算行号。
modecoordsChar
cm.heightAtLine(line: integer|LineHandle, ?mode: string, ?includeWidgets: bool) → number
计算某行的高度,mode 同(coordsChar)。
给定行大于总行数时,按照实际的最后一行计算。
默认从实际的正文处计起,includeWidgets 为 true 时,并且该行有行内小部件时,从第一个行内小部件出计起。
cm.defaultTextHeight() → number
获取默认字体的行高。
cm.defaultCharWidth() → number
获取默认字体中 'x' 字符的宽度。
注意:对非等宽字体或非ASCII字符无效。
cm.getViewport() → {from: number, to: number}
获取文档的渲染范围。
CodeMirror 处理大文档时,只渲染该范围内的正文,参考 viewportChange 事件。
cm.refresh()
修改了编辑器元素的宽高后,或隐藏编辑器后又要显示时,需要调用该函数来确保编辑器正常显示, 参考 autorefresh 插件。

Mode、state 和与 token 有关的函数

在开发语法提示功能之前,需要了解CodeMirror的mode知识。参考 Mode 章节

doc.getMode() → object
获取编辑器的mode对象。 注意:与 getOption("mode") 不同的是,该函数返回mode的定义,而不是初始化过的不可修改的mode对象
cm.getModeAt(pos: {line, ch}) → object
获取指定位置使用的具体 Mode。 返回值与 getMode 相似,但是是具体的Mode,而不是混合Mode(如htmlmixed)。
cm.getTokenAt(pos: {line, ch}, ?precise: boolean) → object
搜索在给的位置({line, ch} 对象)之前的 Mode 的 token 信息。 返回值包含以下属性:
start
token 的起始字符(指定行)。
end
token 的截止字符。
string
Token 的字符串
type
Mode 的 Token 的类型,例如 "keyword""comment" (也可能是 null)。
state
token 结尾处的 Mode 状态。
如果 precise 为 true,token会根据最近的修改来确保准确。 为 false 或未指定时,会根据缓存的状态信息来获取 token 信息, 性能会更好,但如果最近进行了修改或高亮处理并未完成可能会不准确。
cm.getLineTokens(line: integer, ?precise: boolean) → array<{start, end, string, type, state}>
getTokenAt 类似,但会返回该行所有的 token 数组。 该函数比多次调用 getTokenAt 函数的性能更好,因为多次调用会多次格式化每个 token 前的剩余部分。
cm.getTokenTypeAt(pos: {line, ch}) → string
当你仅需要指定位置的 token 类型,并不需要其他信息时,该函数比 getTokenAt 更轻量。 可能返回 null 无样式的 token,或一个字符串,包含多个由空格分隔的样式名。
cm.getHelpers(pos: {line, ch}, type: string) → array<helper>
获取指定位置的所有可用的辅助函数。 该函数支持查找指定 Mode 的辅助函数。 type 参数为辅助函数的命名空间(参考 registerHelper),规定要查找的值。 当 Mode 拥有对应的 type 时,直接确定了要查找值(可以是字符串,或字符串数组)的键。 如果失败,则使用 Mode 的 helperType 属性,最后使用 Mode 的名称。
例如:JavaScript Mode 有 fold 属性包含 "brace"。 当加载 brace-fold 插件时,插件在 fold 命名空间定义了 brace 辅助函数。 然后 foldcode 插件就可以使用该折叠函数来折叠 JavaScript 代码。
'global' 辅助函数在指定命名空间定义时, 可以在当前 Mode 或编辑器中调用,并且所有适用它们定义的函数都将被返回。
cm.getHelper(pos: {line, ch}, type: string) → helper
返回第一个可以用的帮助值。参考 getHelpers
cm.getStateAfter(?line: integer, ?precise: boolean) → object
返回指定行末尾的 Mode 的解析状态。 如果没有指定行号,将返回文档末尾的状态。 可以用来保存解析错误,或其他类似信息。 precisegetTokenAt() 中定义。

杂项

cm.operation(func: () → any) → any
CodeMirror 在处理操作时,会先缓存所有修改,然后在处理完后只更新一次 DOM 结构,这样做有助于性能的提升。
当有大量的操作时,应使用该函数来封装所有的操作,这样可以保证 DOM 结构仅被更新一次。
该函数的返回值是回调函数的返回值。
cm.startOperation()
cm.endOperation()
一般情况应使用 operation 函数。
但是,当需要异步缓存操作时,或不能将所有的操作封装为一个回调函数时,可以使用 startOperation 来开始缓存, 并使用 endOperation 来结束缓存、更新 DOM。
注意:如果忘记调用 endOperation,将不会更新 DOM。
cm.indentLine(line: integer, ?dir: string|integer)
判断某行的缩进,第二个参数的可选值如下(默认 "smart"):
"prev"
与上一行保持一致。
"smart"
使用 Mode 的智能缩进,不可用时使用 "prev"
"add"
增加一个缩进单位
"subtract"
减少一个缩进单位。
<integer>
增加(正数)或减少(负数)多少个空格。
cm.toggleOverwrite(?value: boolean)
未指定值时,切换插入与覆盖的状态。指定值时,切换为对应的状态。
cm.isReadOnly() → boolean
获取正文是否只读。
doc.lineSeparator()
获取行分隔符,参考配置,默认为 "\n"
cm.execCommand(name: string)
执行命令
doc.posFromIndex(index: integer) → {line, ch}
计算并返回正文第 index(从 0 开始)个字符的坐标({line, ch})。
如果 index 超出正文范围,则返回正文的起始坐标或截止坐标(取决于哪边溢出)。
doc.indexFromPos(object: {line, ch}) → integer
posFromIndex 相反。
cm.focus()
使编辑器获得焦点。
cm.phrase(text: string) → string
基于 phrases 配置翻译给定字符串。
cm.getInputField() → Element
获取编辑器的输入元素。
可能是 TextArea 或可编辑的 Div,取决于 inputStyle 配置。
cm.getWrapperElement() → Element
获取编辑器的 DOM 元素,可以修改元素的尺寸或通过删除该元素来删除编辑器实例。
cm.getScrollerElement() → Element
获取负责编辑器滚动的 DOM 元素。
cm.getGutterElement() → Element
获取编辑器侧边栏的 DOM 元素。

静态属性

CodeMirror 的静态属性。

CodeMirror.version: string
获取版本号。
版本号由三个数字组成("major.minor.patch"),patch 为 0 时表示稳定版,其他为先行版。
CodeMirror.fromTextArea(textArea: TextAreaElement, ?config: object)
另一种初始化编辑器的方法。
第一个参数为 TextArea 元素,第二个参数为配置对象。
该函数会用 CodeMirror 实例替换 TextArea,同时也会将编辑器的正文同步给 TextArea,来确保在提交表单时 TextArea 中包含正文。
使用该函数创建的实例包含以下额外的函数:
cm.save()
拷贝正文到 TextArea。
cm.toTextArea()
删除编辑器实例,还原最初的 TextArea(带有正文)。
在删除使用 fromTextArea 创建的实例时,如果没有销毁原 TextArea 的 Form 表单, 则必须调用 toTextArea 来删除编辑器实例,否则表单在提交时会造成内存泄漏。
cm.getTextArea() → TextAreaElement
获取原 TextArea。
CodeMirror.defaults: object
获取配置的默认值。
默认配置是可以修改的(已创建的实例不受影响)。
CodeMirror.defineExtension(name: string, value: any)
扩充 CodeMirror 的 API,在此之后创建的实例可以使用新增的 API。
CodeMirror.defineDocExtension(name: string, value: any)
扩充 Doc 的 API,同 defineExtension
CodeMirror.defineOption(name: string, default: any, updateFunc: function)
扩充 CodeMirror 的配置。
编辑器初始化时或使用 setOption 函数修改配置时会调用 updateFunc
CodeMirror.defineInitHook(func: function)
当需要在编辑器初始化后执行一些操作时,可以使用该函数来实现。
func 函数会在初始化后调用,参数为编辑器实例。
CodeMirror.registerHelper(type: string, name: string, value: helper)
type 命名空间中创建一个名为 name 的帮助变量。
该函数在 CodeMirror 对象中创建名为 type 的属性,指向一个 Map 对象。
例如:执行 CodeMirror.registerHelper("hint", "foo", myFoo) 后,CodeMirror.hint.foo 的值为 myFoo
CodeMirror.registerGlobalHelper(type: string, name: string, predicate: fn(mode, CodeMirror), value: helper)
类似 registerHelper, but also registers this helper as 'global', meaning that it will be included by getHelpers whenever the given predicate returns true when called with the local mode and editor.
CodeMirror.Pos(line: integer, ?ch: integer, ?sticky: string)
光标的构造函数。
sticky 默认为 null,可以是 "before""after",用来说明坐标的坐标应在字符前还是字符后。
CodeMirror.changeEnd(change: object) → {line, ch}
计算修改范围末尾处的坐标。参数包含 fromtotext,同 change 事件。
CodeMirror.countColumn(line: string, index: number, tabSize: number) → number
计算字符串指定下标处的列数(以 tabSize 计)。