CodeMirror使用多个提示源进行自动完成

Jef*_*son 1 javascript codemirror

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

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);
};
Run Code Online (Sandbox Code Playgroud)

但它似乎只包括引用的最后一个源文件而忽略其余的.这有什么简单的方法吗?

Jef*_*son 10

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

var mode = CodeMirror.innerMode(cm.getMode(), cm.getTokenAt(POS).state).mode.name;
Run Code Online (Sandbox Code Playgroud)

我在这里找到.对于我的情况,我想在调用自动​​完成时这样做,所以我的函数看起来像这样:

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);
    }
};
Run Code Online (Sandbox Code Playgroud)

现在,无论何时调用自动完成,它都会检查编辑器在文档中该特定点的模式.


Mar*_*ijn 5

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