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 计)。