8

好的,这是交易:

  • 我正在使用Ace 编辑器
  • 编辑器集成到的应用程序,是用Objective-C/Cocoa编写的
  • 我需要自动完成(对于给定的一组关键字)

现在,这是问题所在:

  • 我知道 AutoCompletion 还没有原生支持
  • 我知道其他人的一些尝试(例如Codiad IDEGherkinAlloy-UI),其中一些使用了Jquery UI Autocomplete - 但我仍然无法弄清楚这如何适应现有的 Ace 设置
  • 我仍然不确定我应该选择面向 JS 的解决方案还是只使用 Objective-C/Cocoa

任何帮助将不胜感激。

4

3 回答 3

19

AutoCompletion 可以在 ace 编辑器中实现。

代码 :

    var editor = ace.edit('editor');
    editor.setTheme("ace/theme/eclipse");
    editor.getSession().setMode("ace/mode/java");
    editor.setShowInvisibles(true);
    editor.setDisplayIndentGuides(true);
    editor.getSession().setUseWrapMode(true);    
    var jsonUrl = "JSON/Components/proce.json";
    //the url where the json file with the suggestions is present
    var langTools = ace.require("ace/ext/language_tools");
    editor.setOptions({enableBasicAutocompletion: true});
    var rhymeCompleter = {
        getCompletions: function(editor, session, pos, prefix, callback) {
            if (prefix.length === 0) { callback(null, []); return }
            $.getJSON(jsonUrl, function(wordList) {
                callback(null, wordList.map(function(ea)  {           
                    return {name: ea.word, value: ea.word, meta: "optional text"}
                }));
            })
        }
    }

    langTools.addCompleter(rhymeCompleter);

json文件格式:

   [ {"word":"hello"}, 
   {"word":"good morning"},
   {"word":"suggestions"},
   {"word":"auto suggest"},
   {"word":"try this"}]

参考/演示:

http://plnkr.co/edit/6MVntVmXYUbjR0DI82Cr?p=preview

于 2013-12-04T08:20:42.573 回答
5

现在要在 Ace 中添加实时自动完成功能:在您的 HTML 中包含 ace/ext-language_tools.js。这 。call 还不能很好地工作,因此您可能必须为此输入 ctrl-space 或 alt-space,但现在将显示标准语法内容,例如写入函数。然后:

var editor = ace.edit("editor");

ace.require("ace/ext/language_tools");
editor.setOptions({
    enableBasicAutocompletion: true,
    enableSnippets: true,
    enableLiveAutocompletion: true
});
于 2015-02-23T15:36:28.360 回答
1

自动补全的难点在于找出关键字,其余的很容易做到。

  1. 您需要一个弹出窗口和 listView 来显示完成,使用基于 Cocoa 的弹出窗口可能会更好。
  2. 一些过滤功能,简单的startsWith检查就可以了,但是你可以使用更好的flex match,比如sublime
  3. 对 editor.session.replace 的简单调用以插入选定的完成

对于 2-3,您应该在https://github.com/ajaxorg/ace/issues/110评论您的特定用例,因为有一项工作可以获得对 AutoCompletion 的本机支持。

于 2013-02-22T21:23:42.067 回答