如何在角色上触发自动完成 - Ace Editor

时间:2015-04-29 23:37:03

标签: ace-editor

如何使用Ace Editor执行以下操作。

  1. 用户输入' @'字符
  2. 自动填充弹出
  3. 用户从下拉列表中进行选择
  4. ' @'现在选择已被删除
  5. 我基本上希望@作为自动完成的触发器,但我不希望它在之后徘徊。

    谢谢

3 个答案:

答案 0 :(得分:1)

addAutoComplete() {
    var me = this;
    ace.require('./config').loadModule('ace/ext/language_tools', () => {
        this.aceEditor.setOptions({
            enableBasicAutocompletion: true,
            enableSnippets: true,
            enableLiveAutocompletion: false
        });
        me.include = /[a-z.]/i;
        this.aceEditor.on('change', (obj, editor) => {
            switch (obj.action) {
                case 'insert':
                    let lines = obj.lines;
                    let char = lines[0];
                    if ((lines.length === 1) && (char.length === 1) && me.include.test(char)) {
                        setTimeout(() => {
                            me.aceEditor.commands.byName.startAutocomplete.exec(me.aceEditor);
                        }, 50);
                    }
                    break;
            }
        });
    });
}

该演示。工作正常

答案 1 :(得分:1)

我们可以绑定' @'关键字并触发自动填充功能:

 editor.commands.addCommand({
        name: "myCommand",
        bindKey: { win: "@", mac: "@" },
        exec: function (editor) {
              autocomplete();
        }
 });

  autocomplete: function () {
        staticWordCompleter = {
            var getWordList = function(editor, session, pos, prefix, callback, isRHSEditor) {
            var wordList = []; // add your words to this list

            callback(null, wordList.map(function(word) {
            return {
                 caption: word,
                value: word
            };
   }));
  editor.completers = [staticWordCompleter];
}

答案 2 :(得分:0)

您可以查看以下代码:

var getWordList = function(editor, session, pos, prefix, callback, isRHSEditor) {
    var wordList = [];
    if(prefix === '@') {
        wordList.push('add you're name list here');
    }
    callback(null, wordList.map(function(word) {
        return {
            caption: word,
            value: word
        };
    }));
}