2016-03-23 2 views
2

Dans emacs yas-minor-mode, je veux utiliser des espaces réservés dans les valeurs listées dans yas-choose-value. Est-ce possible? Le code suivant est ce que je veux faire. Cependant, il ne fonctionne pas bien ..Est-il possible d'utiliser "placeholder" dans les valeurs de "yas-choose-value"?

# -*- mode: snippet -*- 
# name: my_func 
# key: my_func 
# -- 
function_${1:$$(yas-choose-value '("x1(arg1=${2:foo}", "arg2=${3:bar)" "x2(arg1=${2:hoge})" "x3()"))} 
$0 

I estime opération suivante.

(étape 1) yas-expand est exécutée pour "my_func"

I devrait être en mesure de sélectionner l'une de "x1", "x2" et "x3"

(étape -2) arguments doivent être changés acording à la sélection dans (étape-1)

  • si "x1" est sélectionné,

    function_x1(arg1=foo, arg2=bar) 
    

    devrait être complété. Les positions de "foo" et "bar" sont des espaces réservés et sont des valeurs par défaut.

  • si "x2" est sélectionné,

    function_x2(arg1=hoge) 
    

    devrait être complété. Les positions de "hoge" est un espace réservé et sa valeur par défaut.

  • si "x3" est sélectionné,

    function_x3() 
    

    devrait être complété. Pas d'argument.

+2

Il serait peut-être utile de modifier votre question pour clarifier les choses: qu'est-ce qui ne fonctionne pas particulièrement bien? – johnkavanagh

+0

Merci pour vos conseils. J'ai ajouté l'opération prévue. – elgoog

Répondre

0

Je pense que cela a la fonctionnalité que vous recherchez. Donnez un coup de feu.

# -*- mode: snippet -*- 
# name: my_func 
# key: my_func 
# -- 
function_`(yas-choose-value '("x1(arg1=${1:foo}, arg2=${2:bar})" "x2(arg1=${1:hoge})" "x3()"))` 
$0 
+0

Merci pour votre réponse. J'ai essayé vos extraits. Cependant, (étape 2) ne fonctionne pas bien dans mon environnement. Par exemple, si "x2" est sélectionné, je veux éditer le support de place $ {1: hoge}. Mais il a été traité comme une chaîne normale et je ne pouvais pas l'éditer. – elgoog

+0

Quel est votre environnement? J'ai emacs 24.5 et yas snippits 0.8.0. Avez-vous la boîte de dialogue comme première étape pour choisir une fonction? – Sandy

+0

J'utilise emacs 24.5.1 et yasnippet 0.91. Oui, j'obtiens la boîte de dialogue (en tant qu'interface de barre) pour choisir les suivantes quand je tape "my_func" et que j'exécute "yas-expand". x1 (arg1 = $ {1: foo}, arg2 = $ {2: bar}), x2 (arg1 = $ {1: hoge}), x3() Cependant, après un d'eux est CHOISI , il est entré en tant que texte brut dans un tampon. $ {1: foo}, $ {2: bar} et $ {1: hoge} ne sont pas considérés comme des espaces réservés. – elgoog