【问题标题】:Auto-complete with CodeMirrror使用 CodeMirrror 自动完成
【发布时间】:2014-10-03 06:22:02
【问题描述】:

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

我现在正在做的是,

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

但问题是,它甚至在我输入一个单词之前就完成了单词。例如,在空格之后,它给出了所有可能标记的长列表。我希望它仅在输入某些字符时才显示。有人可以帮忙吗?

【问题讨论】:

    标签: javascript autocomplete codemirror


    【解决方案1】:

    在触发自动完成命令之前,检查光标是否真的在“一些”(无论“一些”是什么意思)字母字符之后。此外,当instance.state.completionActive 为真时,什么也不做,因为这意味着已经打开了一个完成弹出窗口。最后,您可能希望监听"inputRead" 事件而不是"change",这样您就不会在以不涉及用户输入的方式对文档进行更改时触发。

    【讨论】:

    • 谢谢。但是"inputRead" 有一个小问题,退格后它不会继续自动完成。如何使用这种方法解决这个问题?
    • 这很好。毕竟您可以使用"change" 事件,并检查change.originchange 是传递给事件处理程序的第二个参数)是否是"+input""+delete"(键入或删除操作)之一。跨度>
    【解决方案2】:

    这就是我在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 的。

    我正在回答我自己的问题以分享该问题的实际解决方案。

    【讨论】:

      猜你喜欢
      • 2014-05-31
      • 1970-01-01
      • 2016-02-27
      • 2014-12-12
      • 2011-06-28
      • 2014-05-07
      • 2017-08-14
      • 2014-02-24
      • 1970-01-01
      相关资源
      最近更新 更多