ACE编辑器中的自动完成功能

时间:2012-11-24 20:47:31

标签: javascript html5 autocomplete syntax-highlighting ace-editor

我发现了同样的问题:Ace Editor autocomplete and multiple languages

但是回复是ACE不支持自动完成,并且根据Google group for Ace Editor“这是我对Ace的渴望,我们明确需要它 for Cloud9“。

这篇文章已有一年了,正如您所看到的,cloud9现在支持自动完成: https://c9.io/site/features/

默认情况下,Ace Editor中是否提供自动完成功能?我找不到任何有关它的信息。

8 个答案:

答案 0 :(得分:51)

自动填充功能现已成为API的官方部分。启用它需要3行代码:

ace.require("ace/ext/language_tools");
var editor = ace.edit("editor");
editor.setOptions({
    enableBasicAutocompletion: true
});

根据您使用require-js的设置,您可能还需要在页面的html中包含一个额外的javascript文件:

<script src="ace/ext-language_tools.js"></script>

您可以在https://github.com/ajaxorg/ace/blob/master/demo/autocompletion.html

找到演示

以下是我刚才就该主题撰写的维基页面:

https://github.com/ajaxorg/ace/wiki/How-to-enable-Autocomplete-in-the-Ace-editor

答案 1 :(得分:13)

由于自动填充功能现已成为ACE api:

的一部分

1)在html顶部加入ace.js

  <script type="text/javascript" src="js/ace.js"></script>

2)还包括mode(语言类型):

  <script type="text/javascript" src="js/mode-yaml.js"></script>

3)还包括您的theme

  <script type="text/javascript" src="js/theme-monokai.js"></script>

4)还包括ex-language_tools.js

  <script src="js/ext-language_tools.js"></script>

5)使用ID编辑器添加您的div(这将成为您的IDE):

  <div id="editor"></div>

6)包括以下脚本(请参阅我的评论以了解它们):

  <script>
    var langTools = ace.require("ace/ext/language_tools");

以下行将id =“editor”的div转换为编辑器

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

以下行设置颜色主题。其他可用主题here ...尝试here

editor.setTheme("ace/theme/monokai"); 

下面的行根据编程语言设置模式......其他模式在这里:

editor.getSession().setMode("ace/mode/yaml");


    editor.setShowPrintMargin(false);

下面的行实时打开自动完成功能。

editor.setOptions({
    enableBasicAutocompletion: true,
    enableSnippets: true,
    enableLiveAutocompletion: false
});

因此,整个事情可以分解为以下几点:

<!DOCTYPE html>
<html>
<head>
  <title>IDE AUTOCOMPLETE</title>
  <link rel="stylesheet" type="text/css" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.min.css">
  <script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
  <script type="text/javascript" src="js/ace.js"></script>
  <script type="text/javascript" src="js/mode-yaml.js"></script>
  <script type="text/javascript" src="js/theme-monokai.js"></script>
  <script src="js/ext-language_tools.js"></script>
</head>
<body>
  <!-- EDITOR SECTION BELOW! -->
  <div id="editor"></div>
  <script>
    var langTools = ace.require("ace/ext/language_tools");
    var editor = ace.edit("editor");
    editor.setTheme("ace/theme/monokai");
    editor.getSession().setMode("ace/mode/yaml");
    editor.setShowPrintMargin(false);
    editor.setOptions({
        enableBasicAutocompletion: true,
        enableSnippets: true,
        enableLiveAutocompletion: false
    });
  </script>
  <!-- EDITOR SECTION ABOVE -->
</body>
</html>

答案 2 :(得分:11)

自动完成仍然不能用于Ace,但是我们已经为基于Ace和完全开源的Codiad IDE实现了一个组件。 您可以查看Github上的代码,它一定会帮助您编写自己的代码。

答案 3 :(得分:3)

AjaxOrg 已在 Cloud9 存储库中推送提交,并显示以下消息:

  

代码完成插件

我认为这就是这个问题的答案。

Here是提交。


另外,我认为this是一个可以帮助我们的好项目。

有关详细信息,我们可以关注this issue opened in Cloud9 repository

中的消息

答案 4 :(得分:1)

确保有以下导入

require('ace/ext/language_tools');
require('ace/multi_select');

根据需要在代码段下使用

editor.setOptions({
            enableBasicAutocompletion: true,
            enableSnippets: true,
            enableLiveAutocompletion: true
        });

答案 5 :(得分:0)

目前无法以任何形式提供。根据这个问题: https://github.com/ajaxorg/ace/issues/1031

自动填充功能仅适用于Cloud9 IDE(基于ACE),可以稍后作为ACE编辑器的单独插件使用。

答案 6 :(得分:0)

将此添加到已安装的文件中:

this.aceEditor.setOptions({
        enableSnippets: true,
        enableLiveAutocompletion: true,
        enableBasicAutocompletion: true
      })

答案 7 :(得分:0)

注意,要实现自定义完成逻辑,可以在<!-- integrity removed for example sake --> <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.12/ace.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.12/ext-language_tools.js"></script> <script> const editor = ace.edit('some-ace-editor-holder-div-id'); editor.setOptions({ enableBasicAutocompletion: [{ getCompletions: (editor, session, pos, prefix, callback) => { // note, won't fire if caret is at a word that does not have these letters callback(null, [ {name: 'hello', value: 'hello', score: 1, meta: 'some comment'}, {name: 'world', value: 'world', score: 1, meta: 'some other comment'}, ]); }, }], // to make popup appear automatically, without explicit _ctrl+space_ enableLiveAutocompletion: true, }); </script> 中传递完成提供者对象。

请参见jsfiddle

 <Tabs value={value} onChange={handleChange} aria-label="simple tabs 
     example">
   <div onClick={() => history.push("/timer")}>
        <Tab   label="Timer" />
    </div>
  </Tabs>

enter image description here

信息source

另请参阅thisthis答案