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

Monaco Editor自定义语言代码提示不生效问题求助

问题原因及修复方案

核心问题:缺少补全项范围定义与触发配置

你的代码提示不生效主要有两个关键原因:

1. 补全项未指定替换范围(Range)

Monaco Editor 需要明确知道补全项要替换的文本范围,否则无法正确定位并插入补全内容。你当前返回的补全项没有包含range属性,编辑器无法识别需要替换的输入内容位置。

2. 未配置触发字符(Trigger Characters)

默认情况下,Monaco 不会在输入普通字母时自动触发补全提示,需要显式指定触发字符,让编辑器在输入这些字符时主动调用补全提供者。


修复后的代码

修改useEffect中的补全提供者注册部分:

useEffect(() => {
  monaco.languages.register({ id: 'mygrammar' });

  let keywords = ['LEFT', 'RIGHT', 'BREAK'];

  monaco.languages.setMonarchTokensProvider('mygrammar', {
    keywords,
    tokenizer: {
      root: [
        [/@?[a-zA-Z][\w$]*/, {
          cases: {
            '@keywords': 'keyword',
            '@default': 'variable',
          }
        }],
        [/".*?"/, 'string'],
        [/\/\//, 'comment'],
      ]
    }
  });

  monaco.languages.registerCompletionItemProvider('mygrammar', {
    // 设置触发字符:所有大小写字母,输入时自动触发提示
    triggerCharacters: [...'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'],
    provideCompletionItems: (model, position) => {
      // 获取当前光标所在的单词范围
      const word = model.getWordUntilPosition(position);
      const range = new monaco.Range(
        position.lineNumber,
        word.startColumn,
        position.lineNumber,
        word.endColumn
      );

      const suggestions = keywords.map(k => ({
        label: k,
        kind: monaco.languages.CompletionItemKind.Keyword,
        insertText: k,
        // 指定替换范围
        range: range
      }));

      return { suggestions };
    }
  });
}, []);

额外验证点

  1. 确保 Monaco 实例初始化完成:如果使用@monaco-editor/react包,建议通过编辑器的onMount回调注册语言和补全提供者,确保 Monaco 实例完全就绪:
<MonacoEditor
  width="800"
  height="400"
  language="mygrammar" 
  value={monacoContent}
  onChange={handleMonacoChange}
  onMount={(editor, monacoInstance) => {
    // 在这里执行语言注册和补全配置逻辑
    monacoInstance.languages.register({ id: 'mygrammar' });
    // ... 其余配置代码
  }}
/>
  1. 检查快捷键冲突:确认 Ctrl+Space 没有被浏览器或其他扩展占用,导致无法手动调出补全窗口。

内容的提问来源于stack exchange,提问作者Ruffyg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:15:18