Javascript executeEdits重置我的编辑操作范围
我试图在Monaco Editor中对事件进行一些基本的回放,但是,每当我将编辑传递给Javascript executeEdits重置我的编辑操作范围,javascript,reactjs,monaco-editor,visual-studio-monaco,Javascript,Reactjs,Monaco Editor,Visual Studio Monaco,我试图在Monaco Editor中对事件进行一些基本的回放,但是,每当我将编辑传递给ExecutedIts,它总是将编辑的范围重置为{StartInNumber:1,startColumn:1,endLineNumber:1,endColumn:1}(这是我在调用executedits后,如果我console.log将消息记录下来就会得到的结果)。实际上,我尝试插入或替换的任何文本都会在第一行的开头结束,并以相反的方式键入文本 摩纳哥为什么要重置我的编辑操作范围?上的文档在范围属性中说明:
ExecutedIts
,它总是将编辑的范围
重置为{StartInNumber:1,startColumn:1,endLineNumber:1,endColumn:1}
(这是我在调用executedits
后,如果我console.log
将消息记录下来就会得到的结果)。实际上,我尝试插入或替换的任何文本都会在第一行的开头结束,并以相反的方式键入文本
摩纳哥为什么要重置我的编辑操作范围?上的文档在范围
属性中说明:
要替换的范围。可以为空以模拟简单插入
因此,您应该能够只传递一个空对象,然后添加编辑操作
但是,说明行号和列从1开始,而不是从0开始。这以及给定范围应描述应替换的文本部分,而不是操作应附加的位置这一事实,导致摩纳哥替换(无效)范围
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)} />
}
}
{
range: {
startLineNumber: 0,
startColumn: 47,
endLineNumber: 0,
endColumn: 47
},
text: '!'
}