monaco-editor使用总结

monaco-editor使用总结
 最后更新于 2024年10月02日 22:59:52

常用API

editor.create()

monaco.editor.create(this.$refs.code, {
  value: this.defaultCode,
  language: 'html',
  foldingStrategy: 'indentation', // 代码可分小段折叠
  tabCompletion: 'on', // tab键补全
  tabSize: 2, // tab键代表的空格数
  minimap: {
    enabled: false // 关闭小地图
  },
  scrollBeyondLastLine: false // 滚动完最后一行后不准再滚动一屏幕
});

editor.getValue()

获取编辑器中的所有文本,并生成一个字符串返回,会保留所有信息(换行、缩进、注释等等)。

editor.updateOptions()

更新编辑器配置

editor.updateOptions({
  readOnly: true // 只读
});

editor.getSelection()

获取编辑器中被选中文案的 range ,返回一个对象,如下:


{
    startLineNumber: 0,
    startColumnNumber: 0,
    endLineNumber: 0,
    endColumnNumber: 0,
}

editor.getModel()

获取编辑器当前的 textmodel,一般不会直接使用,通过 textmodel 可以对文本各种操作。

editor.getModel().findMatches(str|regexp)

功能和 ⌘ + F 一致,通过字符串或正则表达式查找编辑器内匹配的文本,并返回匹配文本 range 的集合。

editor.getModel().getValueInRange(range)

通过 range 获取范围内的文本,返回一个字符串。

editor.getModel().getLinesContent(lineNumber)

如果传入 lineNumber,则返回对应行的文本字符串,不传参则返回所有行的文本字符串的集合。

指定位置插入代码

editor.setValue() 不同,可以用 ⌘ + Z 撤销输入

monaco.editor.executeEdits('insert-code', [
  {
    range: {
      startLineNumber: 1,
      startColumn: 1,
      endLineNumber: 2,
      endColumn: 2
    },
    text, // 插入的代码
  },
])

自定义右键菜单栏

monaco.editor.addAction({
  id: '', // 菜单项 id
  label: '', // 菜单项名称
  keybindings: [this.monaco.KeyMod.CtrlCmd | this.monaco.KeyCode.KEY_J], // 绑定快捷键
  contextMenuGroupId: '9_cutcopypaste', // 所属菜单的分组
  run: () => {}, // 点击后执行的操作
})

标记错误

通过 monaco.editor.setModelMarkers 方法标记位置点,文档

monaco.editor.setModelMarkers(editor.getModel(), 'javascript',
  [{
    startLineNumber: 2,
    endLineNumber: 2,
    startColumn: 1,
    endColumn: 10,
    severity: monaco.MarkerSeverity.Error,
    message: `语法错误`,
  }],
);