2014-09-28 7 views
10

TL; DRAce Editor aggiungere manualmente frammenti

sto cercando di attivare manualmente ace editor di frammenti attraverso una chiamata di funzione, piuttosto che l'approccio convenzionale (tasti della tastiera).

Spiegazione

ho bisogno di una funzione che prende nell'editor e una stringa frammento di come i parametri, e aggiunge che frammento al redattore. function addSnippet(editor, snippet).

L'editor di assi supporta i frammenti di testo TextMate.

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

Così, quando chiamiamo questa funzione, si deve aggiungere il frammento di codice, evidenziare i markers frammento e scegliere il primo. Dopo aver riempito il primo e aver toccato la scheda, l'editor dovrebbe spostarsi sul marcatore di snippet successivo. Proprio come nell'esempio Kitchen Sink (ma voglio aggiungere/attivare snippet tramite una chiamata di funzione).

Ho provato a fare hacking e ho fatto this function. Ma è disordinato e incompleto (non supporta marcatori e tabulazioni). C'è qualche metodo nativo per questo? Ho visto alcuni esempi usando snippetManager, ma usano i trigger di tastiera, non le funzioni manuali.

Qualsiasi aiuto in merito a questo problema sarebbe apprezzato. Grazie.

risposta

20

Dopo ore di hack e di ricerca, ho finalmente è venuto attraverso la funzione di insertSnippet di snippetManager in ext-language_tools.js, funziona in questo modo:

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

Abbastanza facile in realtà, non riusciva a trovare in precedenza a causa della mancanza di documentazione .

+1

Qual è il formato per il frammento di inserire? – ReckerDan

+0

Il formato è TextMate-ish. Basta sostituire tutti i segnaposto nel codice con $ {numero: testo} '(il numero inizia con 1). Guarda l'esempio nella domanda. –

+1

puoi fornire un esempio dello snippet che hai utilizzato –

2

Se non si utilizza RequireJS quindi la seguente sintassi funziona così:

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