Como posso usar vários gatilhos para o mesmo snippet?


11

Eu criei um trecho que eu quero fornecer diferentes gatilhos, então, em vez de dizer trigger, também quero acioná-lo com myothertrigger:

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

Existe uma maneira fácil de fazer isso em vez de copiar o trecho?

Edit: Para ser claro, eu estou usando o UltiSnips , mas se houver um plugin melhor, eu poderia olhar para isso.


2
A resposta dependeria do mecanismo de snippet que você está usando. Com o mu-template, você pode incluir um trecho de outro, copiar o arquivo do trecho com um nome diferente ou apenas criar um link simbólico. Não tenho certeza de que os outros motores possam permitir isso. Pode ser que, algum dia, eles venham a apoiar a inclusão de trechos de trechos de "chamador". Talvez você possa definir o núcleo do seu snippet em uma função python ou viml e fazer com que os snippets chamem a mesma função?
Luc Hermitte

3
A pergunta está marcada como plugin-ultisnips, então eu suponho que o OP está usando ultisnips.
EvergreenTree

Meu erro ^^ '(µTemplate não é melhor, apenas muito diferente, mais antigo e mais adequado às minhas necessidades (eu estou mantendo)): eu tenho snippets de raiz que se comportam como funções que eu posso chamar com opções diferentes para produzir coisas diferentes, mas muito próximas. Por exemplo, em C ++, eu tenho trechos para classe base, classe de valor, classe de exceção ... que todos dependem do mesmo conjunto de trecho de classe + trecho de função + trecho de função + ... Mas, como eu disse, a sintaxe é completamente diferente e o recurso de marcador de posição é menos ergonômico do que o que você está acostumado. Fazer o que você procura seria fácil, mas não uma necessidade que valha uma migração)
Luc Hermitte

2
Se você alternar para o neosnippetplug-in do Shougo , sua sintaxe possui uma aliaspalavra - chave para esse propósito.
VanLaser 29/02

Respostas:


8

Atualmente, não há como fazer isso no UltiSnips. No entanto, existe uma solicitação de recurso aberta no Github . Pessoalmente, eu gostaria de uma funcionalidade de alias para gatilhos, como indicado aqui também.

Vamos torcer para que SirVer (o mantenedor do UltiSnips) também pense assim e inclua-o no futuro :)


5

Embora não haja sintaxe específica para aliases, você pode obter o mesmo efeito usando 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

Nesse arquivo de trechos, o gatilho incexité um "alias" do gatilho incstdlib. Na realidade, incexitexpande para incstdlibe expand(snip)é chamado quando o UltiSnips se move para o tabstop $1. O expand(snip)apenas executa a função VimScript UltiSnips#ExpandSnippetque se expandirá incstdlibpara sua forma expandida final #include <stdlib.h>.

Outra opção é usar o suporte à expressão regular do UltiSnips:

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

Aqui você terá três gatilhos inctrue, incfalsee incboolesses são efetivamente os mesmos. A única desvantagem é que plugins de preenchimento automático, como o YouCompleteMe, não serão preenchidos automaticamente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.