【问题标题】:How to trigger autocomplete dynamically with ace editor: input commands and complete options如何使用 ace 编辑器动态触发自动完成:输入命令和完成选项
【发布时间】:2015-09-16 09:57:20
【问题描述】:
  1. 我知道如何在网页中使用 ace 编辑器
  2. 我知道如何添加完成者

我想这样做,输入一个命令,一个空格,然后按-(破折号), 让ace编辑器自动补全选项(参数),我该怎么办?

例如,这是一个带有选项-a|-b|-c|-d 的命令Print, 当我输入Print -时,如何触发自动完成,让你选择 -a-b-c-d?

【问题讨论】:

    标签: javascript autocomplete editor ace-editor


    【解决方案1】:

    我自己解决。 代码如下:

    var langTools = ace.require("ace/ext/language_tools");
        var editor = ace.edit("stepEditor");
        editor.setTheme("ace/theme/chrome");
        editor.getSession().setMode("ace/mode/tcl");
        editor.setOptions({
            enableBasicAutocompletion: true,
            enableSnippets: false,
            enableLiveAutocompletion: true
        });
        var wordList = [];
        var icc2Commands = null;
        jQuery.getJSON("auto_completion.json",function(obj){  
            icc2Commands = obj;
            for(var name in obj){         
                wordList.push(name);    
            }    
            for(var i = 0; i < 5; i++)
            {
                console.log(wordList[i]);
            }
        }); 
        var icc2Completer = {
            getCompletions: function(editor, session, pos, prefix, callback) {
                var curLine = session.getDocument().getLine(pos.row);
                var curTokens = curLine.slice(0, pos.column).split(/\s+/);
                var curCmd = curTokens[0];
                if (!curCmd) return;
                var lastToken = curTokens[curTokens.length-1];
                var candidates = [];
                if (lastToken && lastToken.match(/^-/)) {
                  for (var option of icc2Commands[curCmd]) {
                    if (option.startsWith(lastToken.slice(1))) {
                      candidates.push("-"+option);
                    }
                  }
                  callback(null, candidates.map(function(ea) {
                    return {name: ea, value: ea, score: 300, meta: "ICC2Option"};
                  }));
                } 
                else{
                    callback(null, wordList.map(function(word) {
                        return {
                            caption: word,
                            value: word,
                            meta: "ICC2Command"
                        };
                    }));
                }
            }
        }
        langTools.addCompleter(icc2Completer);
    

    【讨论】:

    • 感谢您的帖子,但如果您还想自动完成打印,您将如何处理...
    • 密钥在enableLiveAutocompletion 我接受...
    【解决方案2】:

    enableLiveAutocompletion 似乎在许多情况下都有效,但我发现由于某种原因,如果您键入一个单词,然后是一个空格,然后是另一个单词,它不会显示弹出窗口。对我有用的是调用:

    sourceEditor.execCommand('startAutocomplete');
    

    这是触发 ctrl+space 动作的编程方式,在enableLiveAutocompletion 未涵盖的某些情况下似乎会显示弹出窗口。

    【讨论】:

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