使用CodeMirrror自动完成

时间:2014-10-03 06:22:02

标签: javascript autocomplete codemirror

我正在尝试使用CodeMirror show-hint addon实现自动完成,特别是使用sql-hint。我希望它在输入时自动完成。

我现在正在做的是,

codemirror_editor.on("change", function(instance) {
    CodeMirror.commands.autocomplete(instance);
});

但问题是,在我为单词输入单个字母之前,它完成了单词。例如,在空格之后,它给出了所有可能令牌的长列表。我希望它只在键入某些字符时显示。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

在触发自动完成命令之前,检查光标是否实际位于“某些”(无论“某些”意味着)字母字符之后。此外,instance.state.completionActive为真时不执行任何操作,因为这意味着已经打开了完成弹出窗口。最后,您可能希望侦听"inputRead"事件而不是"change",以便在以不涉及用户输入的方式对文档进行更改时不会触发。

答案 1 :(得分:1)

这就是我在Marijn's answer之后解决这个问题的方法。

codemirror_editor.on("inputRead", function(instance) {
    if (instance.state.completionActive) {
        return;
    }
    var cur = instance.getCursor();
    var token = instance.getTokenAt(cur);
    var string = '';
    if (token.string.match(/^[.`\w@]\w*$/)) {
        string = token.string;
    }
    if (string.length > 0) {
        CodeMirror.commands.autocomplete(instance);
    }
});

这可能是SQL特有的。

我正在回答我自己的问题,分享这个问题的实际解决方案。