ACE编辑器自动完成 - 自定义字符串

rus*_*k91 12 javascript autocomplete google-chrome-extension ace-editor

我在Chrome扩展程序中使用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
});
Run Code Online (Sandbox Code Playgroud)

a u*_*ser 29

你需要添加这样的完成者

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]
Run Code Online (Sandbox Code Playgroud)

  • 尝试使用`addCompleter()`而不是`setCompleters()`,这样你的就不会替换系统的 (2认同)

小智 5

如果您想保留旧关键字列表并想附加新列表

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"
            };
        }), ...session.$mode.$highlightRules.$keywordList.map(function(word) {
        return {
          caption: word,
          value: word,
          meta: 'keyword',
        };
      })]);

    }
}

langTools.setCompleters([staticWordCompleter])
// or 
editor.completers = [staticWordCompleter]  
Run Code Online (Sandbox Code Playgroud)