Javascript 如何使用ace编辑器动态触发自动完成:输入命令和完成选项 我知道如何在网页中使用ace编辑器 我知道如何添加完成符

Javascript 如何使用ace编辑器动态触发自动完成:输入命令和完成选项 我知道如何在网页中使用ace编辑器 我知道如何添加完成符,javascript,autocomplete,editor,ace-editor,Javascript,Autocomplete,Editor,Ace Editor,我想这样做,输入一个命令,一个空格,然后按-(破折号), 让ace编辑器自动完成选项(参数),我应该怎么做 例如,这里有一个命令Print,带有选项-a |-b |-c |-d, 当我输入Print-时,如何触发自动完成,并让您选择 -a或-b或-c或-d?我自己解决它。 代码如下: var langTools = ace.require("ace/ext/language_tools"); var editor = ace.edit("stepEditor

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

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

我自己解决它。 代码如下:

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);
var langTools=ace.require(“ace/ext/language_-tools”);
变量编辑器=ace.edit(“步骤编辑器”);
编辑器.setTheme(“ace/theme/chrome”);
editor.getSession().setMode(“ace/mode/tcl”);
editor.setOptions({
enableBasicAutocompletion:正确,
enableSnippets:false,
enableLiveAutocompletion:真
});
var wordList=[];
var icc2Commands=null;
getJSON(“auto_completion.json”,函数(obj){
icc2Commands=obj;
对于(obj中的变量名称){
wordList.push(名称);
}    
对于(变量i=0;i<5;i++)
{
console.log(wordList[i]);
}
}); 
变量icc2Completer={
getCompletions:函数(编辑器、会话、pos、前缀、回调){
var curLine=session.getDocument().getLine(pos.row);
var curTokens=curLine.slice(0,pos.column).split(/\s+/);
var curCmd=curTokens[0];
如果(!curCmd)返回;
var lastToken=curTokens[curTokens.length-1];
var候选=[];
if(lastToken&&lastToken.match(/^-/)){
for(icc2Commands[curCmd]的var选项){
if(option.startsWith(lastToken.slice(1))){
候选人。推送(“-”+选项);
}
}
回调(null,candidates.map)(函数(ea){
返回{name:ea,value:ea,score:300,meta:“ICC2Option”};
}));
} 
否则{
回调(null,wordList.map)(函数(word){
返回{
描述:word,
价值:字,
meta:“ICC2Command”
};
}));
}
}
}
langTools.addCompleter(icc2Completer);

启用LiveAutoCompletion
似乎在许多情况下都能正常工作,但我发现,出于某种原因,如果您键入一个单词,后跟一个空格,然后再键入另一个单词,则不会显示弹出窗口。对我起作用的是:

sourceEditor.execCommand('startautomplete');

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

感谢您的帖子,但是如果您也想自动完成打印,您将如何执行此操作…关键是在
enableLiveAutocompletion
我想。。。