Monaco Editor(0.17.1):选择registerCompletionProvider建议项是否有对应事件?
解决Monaco Editor 0.17.1监听补全项选择的问题
由于0.17.1版本的Monaco Editor没有直接提供补全项选中的原生事件,你可以通过以下两种方式实现需求:
利用光标与内容变更事件间接判断
用户选中补全项后,编辑器光标位置和内容都会发生变化,你可以结合这两个事件来识别补全选择行为:let lastCursorPos = null; // 监听光标位置变化 editor.onDidChangeCursorPosition(e => { const currentPos = e.position; if (lastCursorPos) { // 结合内容变更记录,判断是否是补全导致的位置变化 // 可在onDidChangeModelContent中补充内容变更的判断逻辑 console.log('补全项已选中'); } lastCursorPos = currentPos; }); // 监听编辑器内容变更 editor.onDidChangeModelContent(e => { // 记录内容变更细节,辅助判断是否由补全操作触发 });给补全项绑定自定义命令
在注册补全提供者时,为每个补全项添加command属性,用户选中该补全项时会自动执行命令逻辑:monaco.languages.registerCompletionProvider('javascript', { provideCompletionItems: function(model, position) { return { suggestions: [ { label: 'customFunc', kind: monaco.languages.CompletionItemKind.Function, insertText: 'customFunc()', command: { id: 'onCompletionSelect', execute: function() { // 补全项被选中后的响应逻辑 console.log('选中了customFunc补全项'); } } } ] }; } });这种方式能精准针对单个补全项设置响应逻辑,是更推荐的方案。
注意:0.17.1属于较老版本,部分API与新版本存在差异,以上代码适配该版本特性编写。
内容的提问来源于stack exchange,提问作者consiglieri
相关产品推荐
相关产品推荐

