我想将自己的自定义代码段添加到ace编辑器输入框中。
我将如何添加它们?
摘自Ace editor regarding snippets的文档:
当前,向项目添加自定义片段的唯一方法是创建一个插件(如此处所述)。
[我看到了一个名为ace-snippet-extension的项目,但是自2016年以来就没有进行过更新,除了简单地允许我添加代码段之外,它还做了更多的事情。
此外,我正在使用ES6 + / ES2015 +,因此require语句也令人困惑。
这是我正在寻找的结果:
经过一些研究,我从ace-snippet-extension中提取了有用的位。另一个棘手的部分是代码片段似乎需要某种类型的缩进,这是我为之设计的(但未经充分测试)的功能]
ace-snippets-extension-simple.js
:import ace from 'ace-builds'
export const registerSnippets = function(editor, session, mode, snippetText) {
editor.setOptions({
enableBasicAutocompletion: true,
enableSnippets: true,
})
var snippetManager = ace.require('ace/snippets').snippetManager
var id = session.$mode.$id || ''
var m = snippetManager.files[id]
m.scope = mode
m.snippetText = snippetText
m.snippet = snippetManager.parseSnippetFile(snippetText, m.scope)
snippetManager.register(m.snippet, m.scope)
}
export const createSnippets = snippets =>
(Array.isArray(snippets) ? snippets : [snippets])
.map(({ name, code }) =>
[
'snippet ' + name,
code
.split('\n')
.map(c => '\t' + c)
.join('\n'),
].join('\n')
)
.join('\n')
使用它来导入上面的内容。
import ace from 'ace-builds'
import { Range, EditSession } from 'ace-builds'
import 'ace-builds/src-noconflict/ext-language_tools'
import 'ace-builds/src-noconflict/mode-javascript'
import 'ace-builds/webpack-resolver'
import {
registerSnippets,
createSnippets,
} from './ace-snippets-extension-simple'
const editor = ace.edit(/*HTMLElement reference or css selector string*/)
// ...
// ...
// ...
editor.setOptions({
enableBasicAutocompletion: true,
enableSnippets: true,
enableLiveAutocompletion: false,
})
editor.setTheme('ace/theme/monokai')
editor.session.setMode('ace/mode/javascript')
registerSnippets(
editor,
editor.session,
'javascript',
createSnippets([
{ name: 'build', code: 'console.log("build")' },
{ name: 'destroy', code: 'console.log("destroy")' },
])
)