本文主要是介绍ace编辑器的语法提示,自动完成。其实没什么可特别介绍的,善始善终吧,把项目中使用到的ace的功能都介绍下。html
{ enableBasicAutocompletion: false, //boolea 或 completer数组, enableLiveAutocompletion: false, //boolean 或 completer数组, enableSnippets: false, // boolean }
completer,就是拥有一个getCompletions(editor, session, pos, prefix, callback)方法的objectgit
相关的配置逻辑,能够看下源代码https://github.com/ajaxorg/ace/blob/v1.1.4/lib/ace/ext/language_tools.jsgithub
若是enableBasicAutocompletion, enableLiveAutocompletion的值为数组,就会覆盖编辑器默认的completers,不推荐使用。ajax
enableBasicAutocompletion 数组
设置enableBasicAutocompletion = true,就会增长Autocomplete.startCommand命令。可是快捷键默认是以下配置,和如今的输入法存在冲突。session
startCommand.bindKey = "Ctrl-Space|Ctrl-Shift-Space|Alt-Space"
enableLiveAutocompletion 编辑器
设置enableLiveAutocompletion = true,就会在输入内容时,弹出语法提示框,可是逻辑代码中忽略了一些状况,如删除。
因此若是交互要求变更就弹出提示的话,能够editor绑定change事件,触发命令ui
editor.on("change", function(e){ editor.execCommand("startAutocomplete"); })
项目中还有可能,变量在别的地方预设的,也但愿能自动完成,须要经过language_tools,增长自定义的completerspa
var langTools = ace.acequire("ace/ext/language_tools"); langTools.addCompleter({ getCompletions: function(editor, session, pos, prefix, callback) { console.log(editor, session, pos, prefix, callback); if (prefix.length === 0) { callback(null, []); return } callback(null, [{ name: word, //显示的名称,‘奖金’ value: word, //插入的值,‘100’ score: 1000, //分数,越大的排在越上面 meta: type //描述,‘个人常量’ }]); } });
enableSnippets 调试
设置enableSnippets = true;启用代码块提示的功能。
若是是给本身新增的mode增长snippets,参照下面的文件配置下。
ace.define("ace/snippets/modeName",["require","exports","module"],function(e,t,n){"use strict";t.snippetText=undefined,t.scope="modeName"})
snippets配置说明: https://cloud9-sdk.readme.io/docs/snippets
snippets在线调试:https://ace.c9.io/build/kitchen-sink.html
经过[TAB]在定义的${1},${2},${3}。。。跳转,最后回到${0},详细的就参照《snippets配置说明》配置,提到的Triggers & Guards,试了几种状况,也没搞明白具体有什么限制。