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

Ace Editor自定义自动补全仅匹配指定word触发的实现方法

解决Ace Editor自定义补全仅完全匹配触发的问题

要实现仅当输入内容与自定义片段的word属性完全匹配时才显示对应的补全项,同时保留默认的关键字、本地变量补全,你需要修改getCompletions函数的逻辑,核心是过滤自定义补全项并合并默认补全结果,具体步骤如下:

1. 修正自定义补全列表的语法问题

首先检查你的autoCompleteList.getWordList,确保word是字符串类型,result也是合法的字符串(避免语法错误):

autoCompleteList.getWordList = () => {
    return [
        { 
            word: 'text', // 改为字符串格式
            result: 'new myClass({ someProps: value })', // 用字符串包裹代码片段
            meta: "Query"
        }
    ];
};

2. 修改getCompletions函数逻辑

在编辑器的补全回调中,先获取Ace默认的补全结果,再过滤出与当前输入prefix完全匹配的自定义项,最后合并两者返回:

getCompletions: (editor, session, pos, prefix, callback) => {
    // 先获取Ace原生的默认补全(关键字、本地变量等)
    session.$mode.getCompletions(editor, session, pos, prefix, (err, defaultCompletions) => {
        if (err) {
            callback(err, []);
            return;
        }

        // 过滤自定义补全:仅保留word与输入prefix完全相等的项
        const wordList = autoCompleteList.getWordList();
        const customCompletions = wordList
            .filter(item => item.word === prefix)
            .map(item => ({
                name: item.word,
                value: item.result,
                meta: item.meta // 保留自定义的meta标识
            }));

        // 合并默认补全和匹配的自定义补全
        callback(null, [...defaultCompletions, ...customCompletions]);
    });
}

逻辑说明

  • 默认补全保留:通过session.$mode.getCompletions获取Ace原生的补全结果,确保输入new等关键字时能正常显示默认提示。
  • 自定义项过滤:使用filter(item => item.word === prefix)只保留与当前输入完全匹配的自定义片段,避免无关补全弹出。
  • 结果合并:将过滤后的自定义项和默认补全合并,保证两种补全逻辑共存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:25:17