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