Comment puis-je utiliser plusieurs déclencheurs pour le même extrait?

11

J'ai fait un extrait que je veux donner à différents déclencheurs, donc au lieu de dire que triggerje veux aussi le déclencher avec myothertrigger:

snippet trigger "just an example" 
my text ...
endsnippet

Existe-t-il un moyen simple de le faire au lieu de copier l'extrait de code?

Edit: Pour être clair, j'utilise UltiSnips , mais s'il y a un meilleur plugin, je pourrais y réfléchir .

agold
la source
2
La réponse dépendra du moteur d'extrait que vous utilisez. Avec mu-template, vous auriez pu inclure un extrait d'un autre, copier le fichier d'extrait sous un nom différent ou simplement créer un lien symbolique. Je ne suis pas sûr que les autres moteurs pourraient le permettre. Peut-être si un jour ils prennent en charge l'inclusion d'extraits de fragments "d'appelant". Peut-être pourriez-vous définir le noyau de votre extrait de code dans une fonction python ou viml et demander à vos extraits de code d'appeler la même fonction?
Luc Hermitte
3
La question est étiquetée comme plugin-ultisnips, donc je suppose que l'OP utilise des ultisnips.
EvergreenTree
Mon erreur ^^ '(µTemplate n'est pas meilleur, juste très différent, plus ancien et plus adapté à mes besoins (je le maintiens): j'ai des extraits de racine qui se comportent comme des fonctions que je peux appeler avec différentes options pour produire des choses différentes mais très proches. En C ++, j'ai des extraits pour la classe de base, la classe de valeur, la classe d'exception ... qui dépendent tous du même ensemble d'extraits de classe + d'extraits de fonctions + ... Mais comme je l'ai dit, la syntaxe est complètement différente, et la fonction d'espace réservé est moins ergonomique que celle à laquelle vous êtes habitué. Faire ce que vous cherchez serait facile, mais ne vaut pas la peine d'être migré)
Luc Hermitte
2
Si vous passez au neosnippetplugin Shougo , sa syntaxe a un aliasmot-clé à cet effet.
VanLaser

Réponses:

8

Actuellement, il n'y a aucun moyen de le faire dans UltiSnips. Il existe cependant une demande de fonctionnalité ouverte sur Github . Personnellement, je voudrais une fonctionnalité d'alias pour les déclencheurs comme indiqué ici aussi.

Espérons que SirVer (le mainteneur d'UltiSnips) le pensera aussi et l'inclura à l'avenir :)

cbaumhardt
la source
5

Bien qu'il n'y ait pas de syntaxe spécifique pour les alias, vous pouvez obtenir le même effet en utilisant post_jump:

# c.snippets
global !p
def expand(snip):
    if snip.tabstop != 1:
        return
    vim.eval('feedkeys("\<C-R>=UltiSnips#ExpandSnippet()\<CR>")')
endglobal

snippet incstdlib "#include <stdlib.h>" !b
#include <stdlib.h> /* exit(), malloc(), free() */
$0
endsnippet

post_jump "expand(snip)"
snippet incexit "#include <stdlib.h>" !b
incstdlib$1
endsnippet

Dans ce fichier d'extraits, le déclencheur incexitest un "alias" de déclencheur incstdlib. En réalité, se incexitdéveloppe incstdlibet expand(snip)est appelé lorsque UltiSnips se déplace vers le tabstop $1. Le expand(snip)exécute simplement la fonction VimScript UltiSnips#ExpandSnippetqui se développera incstdlibdans sa forme développée finale #include <stdlib.h>.

Une autre option consiste à utiliser à la place la prise en charge des expressions régulières UltiSnips:

snippet "inc(true|false|bool)" "#include <stdbool.h>" r
#include <stdbool.h> /* true, false */
endsnippet

Ici, vous aurez trois déclencheurs inctrue, incfalseet incboolce sont effectivement les mêmes. Le seul inconvénient est que les plugins d'auto-complétion comme YouCompleteMe ne les complèteront pas automatiquement.

ecerulm
la source