executeEdits重置我的编辑操作范围

时间:2018-12-20 17:30:30

标签: javascript reactjs monaco-editor visual-studio-monaco

我正在尝试在Monaco Editor中对事件进行一些基本的回放,但是,每当我对main.html进行编辑时,它总是将我的编辑executeEdits重置为range (如果我在消息{em>之后呼叫{ startLineNumber: 1, startColumn: 1, endLineNumber: 1, endColumn: 1 }console.log就会得到此信息)。实际上,我尝试插入或替换的任何文本始终会出现在第一行的开头,并有效地反向键入文本。

typing in reverse

executeEdits

我正在使用react渲染摩纳哥编辑器,如上所示。上下文提供了一个对象,该对象基本上允许我订阅播放事件,传递给import * as React from 'react' import * as monaco from 'monaco-editor' import { PlayerContext } from './player-context' const defaultOptions = { minimap: { enabled: false } } export default class MonacoEditor extends React.Component { static contextType = PlayerContext handleMessage = message => { this._editor.executeEdits('', [ { ...message, forceMoveMarkers: true } ]) } componentDidMount() { const { path, value, language, ...options } = this.props const model = monaco.editor.createModel(value, language, path) this._editor = monaco.editor.create(this._node, { ...defaultOptions, ...options }) this._editor.setModel(model) this.context.addMessageHandler('didChange', this.handleMessage) } componentWillUnmount() { this._editor && this._editor.dispose() this.context.removeMessageHandler('didChange', this.handleMessage) } render() { return <div style={{ height: 500 }} ref={c => (this._node = c)} /> } } 的{​​{1}}对象的形状为IIdentifiedSingleEditOperation

message

摩纳哥为什么要重置我的编辑操作范围?

1 个答案:

答案 0 :(得分:1)

IIdentifiedSingleEditOperation上的文档在range属性中说:

  

要替换的范围。可以为空以模拟简单的插入。

因此,您应该只可以传递一个空对象,然后将附加编辑操作。

但是,documentation on the Range class指出行号和列的开头是1,而不是0。这以及给定范围应描述应替换的文本部分的事实,而不是应该附加操作的位置,这会导致摩纳哥替换(无效)范围。