为什么突出显示代码的随机部分?

Why is a random part of the code highlighted?

我们有一个由 monaco-editor 制作的在线编辑器,这里是 link:https://v3.10studio.tech/#/formula-editor-addin?app=formula-editor-addin。用户可以输入 Excel 公式,例如 =1+2+3+4+5,然后单击 Format 按钮查看格式化的公式。

奇怪的是,点击 Format 按钮后,公式的随机部分经常以灰色突出显示:

有谁知道可能是什么原因吗?

PS: 当前选项设置如下:

const monacoOptions: monacoEditor.editor.IEditorConstructionOptions = {
  lineNumbers: 'off',
  selectionHighlight: false,
  glyphMargin: false, //left side,
  lineDecorationsWidth: 0, // width between line number and content,
  renderIndentGuides: false, // no indent guide lines
  minimap: { enabled: false },
};

当您设置模型的值时,即 editor.getModel().setValue('FORMATTED-CODE') 您应该必须手动设置光标的位置。

select离子实际上不是随机的。摩纳哥将 select 您添加的所有额外文本。例如 -
之前:1+2+3+4+5 - 这里的最后位置是第 1 行第 10 列
格式:1 + 2 + 3 + 4 + 5 - 这里的最后位置是第 1 行第 18 列
所以额外的文本 + 4 + 5 是 selected,这意味着第 11 到 18 列是 selected

将光标位置设置在之前的位置

const pos = editor.getPosition()
editor.getModel().setValue('FORMATTED-CODE')
editor.setPosition(pos)

设置光标位置在Line 1 Column 1

editor.getModel().setValue('FORMATTED-CODE')
editor.setPosition({ lineNumber: 1, column: 1 })

最后设置光标的位置(使用偏移量)

const formatted = 'FORMATTED-CODE'
const offset = formatted.length
const pos = editor.getModel().getPositionAt(offset)

editor.getModel().setValue(formatted)
editor.setPosition(pos)

你也可以设置selection

editor.setSelection({
  startLineNumber: 1,
  startColumn: 1,
  endLineNumber: 1,
  endColumn: 5,
})

有关更多信息,您可以按照这些 API -