Редактор Ace вручную добавляет фрагменты

TL; DR

Я пытаюсь вручную вызвать фрагменты редактора ace через вызов функции, а не обычный подход (клавиши клавиатуры).

объяснение

мне нужна функция, которая принимает редактор и строку фрагмента в качестве параметров и добавляет этот фрагмент в Редактор. function addSnippet(editor, snippet).

редактор Ace поддерживает сниппеты текст. сообщ-иш.

if (${1:condition_name}) {
     ${2:body}
}

поэтому, когда мы вызываем эту функцию, следует добавить фрагмент, выделить маркеры фрагмента и выбрать первый. После заполнения первой и нажатия вкладки редактор должен перейти к следующему маркеру фрагмента. Прямо как в Раковина пример (но я хочу добавить/вызвать фрагменты с помощью вызова функции).

Я попытался взломать свой путь и сделал эта функция. Но это грязно и неполно (не поддерживает маркеры и вкладки). Существует ли какой-либо собственный метод для этого? Я видел несколько примеров использования snippetManager, но они используют триггеры клавиатуры, а не ручные функции.

любая помощь по этому вопросу буду признателен. Спасибо.

2 ответов


после нескольких часов взломов и исследований я, наконец, наткнулся на insertSnippet функции snippetManager на ext-language_tools.js, это работает так:

var snippetManager = ace.require("ace/snippets").snippetManager;
snippetManager.insertSnippet(editor, snippet);

довольно легко на самом деле, не мог найти его раньше из-за отсутствия документации.


Если вы не используете RequireJS, то работает следующий синтаксис:

ace.config.loadModule('ace/ext/language_tools', function () {
    editor.insertSnippet(snippetText);
});