2014-10-03 65 views
0

我想實現自動完成使用CodeMirror show-hint插件,特別是與sql-hint。我想讓它在我輸入時自動完成。自動完成與CodeMirrror

我在做什麼現在的問題是,

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

但問題是,它完成的話之前,我甚至鍵入一個單詞一個字母。例如,在空格之後,它給出了所有可能令牌的長列表。我希望它只有在鍵入某些字符時才顯示出來。有人可以幫忙嗎?

回答

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(/^[.`\[email protected]]\w*$/)) { 
     string = token.string; 
    } 
    if (string.length > 0) { 
     CodeMirror.commands.autocomplete(instance); 
    } 
}); 

這可能是特定於SQL的。

我在回答我自己的問題以分享問題的實際解決方案。

2

在啓動自動完成命令之前,請檢查光標是否實際位於「some」(無論「some」意味着什麼)字母字符之後。另外,當instance.state.completionActive爲真時,什麼都不做,因爲這意味着已經打開了一個完成彈出窗口。最後,您可能想要傾聽"inputRead"事件而不是"change",以便在不涉及用戶輸入的情況下對文檔進行更改時不會觸發。

+0

謝謝。但是''inputRead''存在一些小問題,它在退格後不會繼續自動完成。我該如何解決這個問題? – nisargjhaveri 2014-10-03 19:46:01

+1

這是一個很好的觀點。畢竟,你可以使用''change''事件,並檢查'change.origin'('change'是傳遞給事件處理程序的第二個參數)是''+ input「'還是''+ delete」之一'(打字或刪除動作)。 – Marijn 2014-10-04 19:24:00