我正在尝试使用CodeMirror show-hint addon实现自动完成,特别是使用sql-hint。我希望它在输入时自动完成。
我现在正在做的是,
codemirror_editor.on("change", function(instance) {
CodeMirror.commands.autocomplete(instance);
});
但问题是,在我为单词输入单个字母之前,它完成了单词。例如,在空格之后,它给出了所有可能令牌的长列表。我希望它只在键入某些字符时显示。有人可以帮忙吗?
答案 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特有的。
我正在回答我自己的问题,分享这个问题的实际解决方案。