ACE编辑器自动完成删除局部变量

时间:2014-11-18 09:54:07

标签: javascript autocomplete ace-editor

我正在使用ace编辑器,我启用了basicautocompletion,我从另一台服务器提取数据以获取建议。一切正常,但我想从建议框中删除本地建议。

以下是我的相关代码:

var langTools = ace.require("ace/ext/language_tools");
var editor = ace.edit("editor");

editor.setTheme("ace/theme/xcode");
var TextMode = require("ace/mode/text").Mode;
editor.getSession().setUseWrapMode(true);

editor.setOptions({
  enableBasicAutocompletion: true,
});

var qtags = {
getCompletions: function(editor, session, pos, prefix, callback) {
  $.getJSON(jsonURL,
    function(tagList) {
      callback(null, tagList.map(function(qtag) {
        return {name: qtag.name, value: "#"+qtag.name+"() ", meta: "qtag"}
      }));
    })
  }
}
langTools.addCompleter(qtags);

以下是它的样子:

Example

在添加我的qtag完成符之前,我已尝试删除所有完成符,但这并未删除局部变量

langTools.completers = [];

任何输入都会受到赞赏,我试图避免在可能的情况下修改ace / ext / language_tools.js,但此时我甚至打开那个选项。

2 个答案:

答案 0 :(得分:17)

诀窍是在致电langTools.setCompleters([])之前致电editor.setOptions({enableBasicAutocompletion: true}); 。在设置或添加完成程序之前,最好将此选项显式设置为false。无需更改language_tools的源代码。

示例:

var langTools = ace.require("ace/ext/language_tools");
var editor = ace.edit("editor");

editor.setTheme("ace/theme/xcode");
var TextMode = require("ace/mode/text").Mode;
editor.getSession().setUseWrapMode(true);

var qtags = {
  getCompletions: function(editor, session, pos, prefix, callback) {
    $.getJSON(jsonURL,
      function(tagList) {
        callback(null, tagList.map(function(qtag) {
          return {name: qtag.name, value: "#"+qtag.name+"() ", meta: "qtag"}
      }));
    })
  }
}

langTools.setCompleters([qtags]);

editor.setOptions({
  enableBasicAutocompletion: true,
});

答案 1 :(得分:8)

您可以使用langTools.setCompleters

langTools = require("ace/ext/language_tools")
langTools.setCompleters([langTools.snippetCompleter, langTools.textCompleter])

editor.completers = [langTools.snippetCompleter, langTools.textCompleter, qtags]