You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:02:06