1

是否可以为自动完成包含多个提示源?我试过这个:

CodeMirror.commands.autocomplete = function(cm) {
    CodeMirror.showHint(cm, CodeMirror.hint.xml);
    CodeMirror.showHint(cm, CodeMirror.hint.html);
    CodeMirror.showHint(cm, CodeMirror.hint.css);
    CodeMirror.showHint(cm, CodeMirror.hint.javascript);
};

但它似乎只包含最后一个引用的源文件,而忽略其余部分。有什么简单的方法可以做到这一点吗?

4

2 回答 2

10

我在另一个问题中找到了我的问题的答案,所以如果这让这个问题有点多余,请原谅。我需要做的是在调用自动​​完成时找出当前处于活动状态的模式(我正在使用混合模式)。为此,我首先需要以下模式:

var mode = CodeMirror.innerMode(cm.getMode(), cm.getTokenAt(POS).state).mode.name;

我在这里找到的。对于我的情况,每当调用自动完成功能时,我都想这样做,所以我的函数如下所示:

CodeMirror.commands.autocomplete = function(cm) {
    var doc = cm.getDoc();
    var POS = doc.getCursor();
    var mode = CodeMirror.innerMode(cm.getMode(), cm.getTokenAt(POS).state).mode.name;

    if (mode == 'xml') { //html depends on xml
        CodeMirror.showHint(cm, CodeMirror.hint.html);
    } else if (mode == 'javascript') {
        CodeMirror.showHint(cm, CodeMirror.hint.javascript);
    } else if (mode == 'css') {
        CodeMirror.showHint(cm, CodeMirror.hint.css);
    }
};

现在,每当调用自动完成功能时,它都会检查编辑器在文档中的特定点处于什么模式。

于 2013-10-23T14:25:32.313 回答
5

CodeMirror(最新版本)中已经存在处理此问题的功能,您可以在其中使用 defineHelper 定义特定于语言的辅助函数,如果您不明确给出标准完成程序(show-hint.js),它将完成函数,使用为语言定义的函数。标准完成者插件确实将自己注册为适用于他们的语言,因此它应该“开箱即用”。

于 2013-10-31T09:35:00.353 回答