2014-09-28 17 views
10

TL; DRAce Editor вручную добавив фрагменты

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

Объяснение

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

Редактор Ace поддерживает фрагменты TextMate-ish.

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

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

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

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

ответ

20

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

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

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

+1

Каков формат для сниппета вставить? – ReckerDan

+0

Формат TextMate-ish. Просто замените все заполнители кода на '$ {number: text}' (число начинается с 1). Посмотрите пример в вопросе. –

+1

вы можете привести пример фрагмента, который вы использовали –

2

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

ace.config.loadModule('ace/ext/language_tools', function() { 
    editor.insertSnippet(snippetText); 
}); 
Смежные вопросы