9

我在Chrome擴展中使用ACE編輯器。我正在使用ACE的自動完成功能,但我希望能夠完全定義用於自動完成的靜態字符串列表,而不是任何本地字符串或片段。 (將來我可能會使用比靜態列表更復雜的東西,但現在靜態是好的。)ACE編輯器自動完成 - 自定義字符串

任何人都可以提供關於如何完成此操作的一些說明?我已經啓用了自動完成功能並關閉了代碼片斷,但是我無法定義要使用的靜態字符串列表。

所有我至今是:

var editor = ace.edit('propertiesText'); 
editor.getSession().setMode('ace/mode/properties'); 
var langTools = ace.require('ace/ext/language_tools'); 

// code here to define custom strings? 

editor.setOptions({ 
    enableBasicAutocompletion: true 
}); 

回答

17

你需要添加這樣

var staticWordCompleter = { 
    getCompletions: function(editor, session, pos, prefix, callback) { 
     var wordList = ["foo", "bar", "baz"]; 
     callback(null, wordList.map(function(word) { 
      return { 
       caption: word, 
       value: word, 
       meta: "static" 
      }; 
     })); 

    } 
} 

langTools.setCompleters([staticWordCompleter]) 
// or 
editor.completers = [staticWordCompleter] 
+0

完成者是否實際檢查/無論如何使用前綴?在'callback'中發生魔法?或者它只是轉儲整個單詞列表,無論輸入的前綴是什麼? – Xan

+1

之後,Noramlly ace autocompleter過濾列表,https://github.com/ajaxorg/ace/blob/v1.1.9/lib/ace/autocomplete.js#L427。前綴傳遞給更復雜的完成者,需要根據上下文給出不同的完成。 –

+0

感謝您的澄清。這是可惜的,這似乎沒有記錄在任何地方。 – Xan