Ace编辑器的自动完成功能

时间:2013-02-22 08:11:31

标签: javascript objective-c cocoa autocomplete ace-editor

好的,所以这是交易:

  • 我正在使用Ace Editor
  • 编辑器集成的应用程序,写成Objective-C / Cocoa
  • 我需要AutoCompletion(针对给定的一组关键字)

现在,抓住这个问题:

  • 我知道AutoCompletion尚未得到本机支持
  • 我知道其他人的一些尝试(例如Codiad IDEGherkinAlloy-UI),有些人正在使用Jquery UI Autocomplete - 但我仍然无法弄清楚这是怎么做的适应现有的Ace设置
  • 我仍然不确定我是否应该选择面向JS的解决方案,或者只是使用Objective-C / Cocoa

任何帮助都不仅仅是值得赞赏的。

3 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:3)

现在在Ace中添加Live Auto Completion: 在您的HTML中包含ace / ext-language_tools.js。 的。调用无法正常工作,因此您可能必须为此输入ctrl-space或alt-space,但现在将显示标准语法内容,如写入函数。 然后:

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

ace.require("ace/ext/language_tools");
editor.setOptions({
    enableBasicAutocompletion: true,
    enableSnippets: true,
    enableLiveAutocompletion: true
});

答案 2 :(得分:1)

自动完成的难点在于找出其余的容易做的关键字。

  1. 你需要一个弹出窗口,而listView可以显示完成次数 最好使用基于Cocoa的弹出窗口。
  2. 一些过滤功能,简单的启动和检查会做,但你可以使用更好的flex匹配 喜欢崇高
  3. 简单地调用editor.session.replace来插入 选定完成
  4. 对于2-3,您应该在https://github.com/ajaxorg/ace/issues/110处对您的特定用例发表评论,因为有一项工作需要获得AutoCompletion的原生支持。