【问题标题】:ACE Editor Autocomplete - custom stringsACE 编辑器自动完成 - 自定义字符串
【发布时间】:2015-07-14 12:41:09
【问题描述】:

我在 Chrome 扩展程序中使用 ACE 编辑器。我正在使用 ACE 的自动完成功能,但我希望能够完全定义用于自动完成的静态字符串列表,而不是任何本地字符串或 sn-ps。 (将来我可能会使用比静态列表更复杂的东西,但现在静态很好。)

谁能提供一些有关如何完成此操作的说明?我已经启用了自动完成功能并关闭了 sn-ps,但在定义要使用的静态字符串列表时遇到了麻烦。

到目前为止,我只有:

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

【问题讨论】:

    标签: javascript google-chrome-extension autocomplete ace-editor


    【解决方案1】:

    你需要像这样添加一个完成者

    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]
    //UPDATE: consider adding to completers list to not remove ace's already added completers
    editor.completers.push(staticWordCompleter)
    

    【讨论】:

    • 这实际上是否检查/使用前缀? callback 发生了魔法?还是不管输入的前缀是什么,它只是简单地转储整个单词列表?
    • Noramlly ace 自动完成程序会在之后过滤列表,github.com/ajaxorg/ace/blob/v1.1.9/lib/ace/autocomplete.js#L427。为更复杂的完成者传递前缀,这些完成者需要根据上下文给出不同的完成。
    • 感谢您的澄清。很遗憾,这似乎没有在任何地方记录。
    • 有什么方法可以禁用该过滤器?
    • 尝试使用addCompleter()而不是setCompleters(),这样你的就不会替换系统的了
    【解决方案2】:

    如果你想保留旧的关键字列表并想追加一个新的列表

    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]  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      相关资源
      最近更新 更多