自定义自动填充和句点(。)

时间:2015-03-07 22:51:27

标签: ace-editor

在使用自定义前缀提取正则表达式 identifierRegexps

时,我似乎无法在我的自定义完成符中触发 getCompletions 函数

基本上我正在尝试创建一个自动完成器,它将触发句点(。)前面的字母。例如。在“foo”中。当输入句号时,我想提出我的自定义建议。

var lang = ace.require("ace/ext/language_tools");
var editor = ace.edit("editor");
editor.getSession().setMode("ace/mode/javascript");
editor.setOptions({
  enableBasicAutocompletion: true,
  enableSnippets: true,
  enableLiveAutocompletion: true
});

var compl = {
  identifierRegexps: [/[a-zA-Z_0-9\.\$\-\u00A2-\uFFFF]/],
  getCompletions: function (editor, session, pos, prefix, callback) {
    alert(prefix);

    callback(null, []);
    return;
  }
}
lang.addCompleter(compl);

使用上面的代码段,在键入点时会显示建议弹出窗口但 getCompletions 不会触发。但是,它会触发任何其他角色。

更新

在使用

添加自定义完成符之前删除默认完成符
lang.setCompleters();

使 getCompletion 函数触发。但是, prefix 参数在这种情况下为空。

3 个答案:

答案 0 :(得分:2)

通过修改language_tools.js中的ID_REGEX var来管理解决它。

答案 1 :(得分:0)

在ext-language-tools.js文件中,

替换 var ID_REGEX = /[a-zA-Z_0-9\$\-\u00A2-\uFFFF]/;

var ID_REGEX = /[a-zA-Z_0-9\.\$\-\u00A2-\uFFFF]/;

使用上述ID_REGEX,自动完成功能现在将触发句点(。)

答案 2 :(得分:0)

修改language_tools.js文件不是一个好的解决方案,您可以通过调用方法getCompletionRegex来调整正则表达式模式:

editor.getCompletionRegex = () => /[a-zA-Z_0-9.\$\-\u00A2-\uFFFF]/;