【问题标题】:Custom autocompleter and periods (.)自定义自动完成程序和句点 (.)
【发布时间】:2015-03-07 22:51:26
【问题描述】:

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

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

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

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);

使用上面的 sn-p,在键入点时会出现建议弹出窗口,但 getCompletions 不会触发。但是,它确实会在任何其他角色上触发。

更新:

在添加自定义完成程序之前删除默认完成程序

lang.setCompleters();

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

【问题讨论】:

    标签: ace-editor


    【解决方案1】:

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

    【讨论】:

    • 这不是一个好的解决方案,因为我们不能简单地为不同的完成者自定义前缀。
    • 这不再是必需的了,Ace 中有一个错误已修复。对于使用 Brace 的用户,当前版本使用具有此修复程序的 Ace 版本,因此您使用 identifierRegexps 也应该没有问题。但是您必须记住,Ace 在输入结束时开始匹配。例如。如果输入以.test 结尾,它将尝试匹配t,然后是st,然后是est,然后是test,然后是.test。一旦匹配失败就停止,然后使用最后一个匹配作为前缀。
    【解决方案2】:

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

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

    【讨论】:

    • 你的意思是\.而不是.
    【解决方案3】:

    在 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,自动完成现在将触发句点 (.)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 2019-09-19
      • 2016-10-11
      • 1970-01-01
      相关资源
      最近更新 更多