可以使用setTokenizer
函数来更改自动完成标记器的行为。首先,需要创建自己的标记器,该标记器只考虑单个单词,而不是整个行。然后,将其传递给setTokenizer
函数,在其中包装自定义标记器以确保始终触发自动完成。以下是示例代码:
// 自定义标记器
var customTokenizer = {
getLineTokens: function(line) {
var tokens = [];
var currentWord = "";
for (var i = 0; i < line.length; i++) {
if (/\s/.test(line[i])) {
// 空格划分单词
tokens.push({ value: currentWord, type: "word" });
currentWord = "";
} else {
currentWord += line[i];
}
}
// 添加最后一个单词
if (currentWord !== "") {
tokens.push({ value: currentWord, type: "word" });
}
return { tokens: tokens, state: null };
}
};
// 设置自定义标记器
editor.session.setTokenizer(customTokenizer);
// 包装自定义标记器以始终触发自动完成
editor.commands.on("afterExec", function(e) {
if (e.command.name == "insertstring") {
var currentPosition = editor.getCursorPosition();
var line = editor.session.getLine(currentPosition.row);
var token = editor.session.getTokenAt(currentPosition.row, currentPosition.column);
if (!/\s/.test(line[currentPosition.column - 1]) && token.type === "word") {
editor.execCommand("startAutocomplete");
}
}
});
下一篇:Ace编辑器中的“Name属性”