我想这样做,输入一个命令,一个空格,然后按-
(短划线),
让ace编辑器自动完成选项(参数),我该怎么办?
例如,这是一个带有选项Print
的命令-a|-b|-c|-d
,
当我输入Print -
时,如何触发自动完成,并让您选择
-a
或-b
或-c
或-d
?
答案 0 :(得分:5)
我自己解决。 代码如下:
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);
答案 1 :(得分:0)
enableLiveAutocompletion
在许多情况下似乎都可以使用,但是我发现由于某些原因,如果您先键入一个单词,然后键入一个空格,然后键入另一个单词,它不会显示弹出窗口。对我有用的是打电话给我:
sourceEditor.execCommand('startAutocomplete');
这是触发 ctrl + space 动作的编程方式,在某些情况下似乎弹出了enableLiveAutocompletion
未涵盖的弹出式窗口。