2013-10-22 93 views
0

是否可以包含多個提示源用於自動完成?我試過這個: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); 
}; 

但它似乎只包括最後一個被引用的源文件,而忽略其餘的。有沒有簡單的方法來做到這一點?

回答

8

我在另一個問題中找到了我的問題的答案,所以請原諒,如果這使得這個問題有點多餘。我需要做的是在調用自動​​完成時找出當前活動的模式(我正在使用混合模式)。要做到這一點首先,我需要的模式:

var mode = CodeMirror.innerMode(cm.getMode(), cm.getTokenAt(POS).state).mode.name; 

我發現here。對於我的情況我想做的事,每當自動完成被稱爲所以我的函數如下所示:

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); 
    } 
}; 

現在,每當自動完成它叫做檢查編輯器在文件中說具體點是什麼模式。

5

處理此問題的一項功能已經出現在CodeMirror的(最新版本)中,您可以在其中定義語言特定的輔助函數和defineHelper,而標準完成程序(show-hint.js)將會給它一個明確的完成函數,使用爲該語言定義的函數。標準完成者插件確實註冊爲適用於他們的語言,因此它應該「開箱即用」。