Как программно включить сниппет yasnippet в сниппет

Я ищу способ написать фрагмент, который позволил бы мне добавить еще один фрагмент. Вот пример фрагмента для функции Python:

def test(args):
    ${1:code here}
    $(insert-snippet "not_implemented_exception")

В этом примере я хотел бы сначала записать некоторое содержимое функции python в поле № 1, а затем нажать TAB. Нажатие TAB должно привести меня к биту lisp, где я могу расширить фрагмент с именем «not_implemented_exception».

Я пробовал читать исходный код, но я новичок в лиспе, поэтому не нашел ничего полезного.


person sp3ctum    schedule 16.11.2012    source источник
comment
возможный дубликат Как расширить фрагмент в фрагмент кода с помощью YASnippet?   -  person Tyler    schedule 17.11.2012


Ответы (1)


Я думаю, вы могли бы просто сделать текст not_implemented_exception последней кнопкой табуляции, чтобы вы могли нажать TAB еще раз, чтобы развернуть его.

def test(args):
    ${1:code here}
    not_implemented_exception$0

Если вы не хотите помещать фрагмент в конец, вы можете включить вложенный фрагмент с помощью

(setq yas-triggers-in-field t)
person tungd    schedule 16.11.2012
comment
Кажется, работает, с ограничением, что он работает только для последнего поля. Я попытался изменить последнюю строку на $ {2: not_implemented_exception $ 3}, но yas-next-field не расширяет мой фрагмент исключения. Интересно, что могло быть не так. - person sp3ctum; 18.11.2012
comment
В yasnippet недавно произошли некоторые изменения, вместо этого попробуйте yas-next-field-or-maybe-expandyas-triggers-in-field on) - person tungd; 19.11.2012
comment
Извините, я не прочитал ваш комментарий. Если вы хотите сделать not_implemented_exception заполнителем, это должно быть ${2:not_implemented_exception$0}. Табуляция $0 выйдет из первого фрагмента, чтобы можно было развернуть следующий. Если вы хотите использовать развернутый фрагмент с накоплением, см. Мой предыдущий комментарий. Лично меня это сбивает с толку, поэтому я им не пользуюсь. - person tungd; 19.11.2012
comment
yas-triggers-in-field установлен в t, но yas-next-field-or-maybe-expand все равно переходит к следующему фрагменту при применении с ${2:not_implemented_exception$3}. Это происходит на поле №3. Может ли это быть неправильная конфигурация? Вот вся моя конфигурация на yasnippet. - person sp3ctum; 20.11.2012
comment
Это может быть ошибка или что-то в этом роде, вы можете попробовать связаться с автором на Github. Честно говоря, раньше я использовал эту функцию всего несколько раз. - person tungd; 21.11.2012
comment
Спасибо, попробую спросить автора на Github. - person sp3ctum; 22.11.2012