¿Cómo puedo usar varios disparadores para el mismo fragmento?

11

He creado un fragmento que quiero dar diferentes desencadenantes, por lo que en lugar de decir triggerque también quiero activarlo con myothertrigger:

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

¿Hay una manera fácil de hacer esto en lugar de copiar el fragmento?

Editar: Para ser claros, estoy usando UltiSnips , pero si hay un complemento mejor, podría investigarlo.

un oro
fuente
2
La respuesta dependerá del motor de fragmentos que esté utilizando. Con mu-template podría haber incluido un fragmento de otro, copiar el archivo de fragmento con un nombre diferente o simplemente crear un enlace simbólico. No estoy seguro de que los otros motores puedan permitirlo. Puede ser si algún día vienen a apoyar la inclusión de fragmentos de fragmentos de "llamador". ¿Quizás podría definir el núcleo de su fragmento en una función python o viml y hacer que sus fragmentos llamen a la misma función?
Luc Hermitte
3
La pregunta está etiquetada como plugin-ultisnips, por lo que supongo que el OP está usando ultisnips.
EvergreenTree
Mi error ^^ '(µTemplate no es mejor, solo que es muy diferente, más antiguo y más adecuado para mis necesidades (lo mantengo): tengo fragmentos de raíz que se comportan como funciones que puedo llamar con diferentes opciones para producir cosas diferentes pero muy cercanas. Por ejemplo, en C ++ tengo fragmentos de clase base, clase de valor, clase de excepción ... que dependen del mismo conjunto de clase-fragmento + función-fragmento + ... Pero como dije, la sintaxis es completamente diferente y la función de marcador de posición es menos ergonómica que la que estás acostumbrado. Hacer lo que estás buscando sería fácil, pero no necesariamente vale la pena migrar)
Luc Hermitte
2
Si cambia al neosnippetcomplemento de Shougo , su sintaxis tiene una aliaspalabra clave para este mismo propósito.
VanLaser

Respuestas:

8

Actualmente no hay forma de hacer esto en UltiSnips. Sin embargo, hay una solicitud de función abierta en Github para ello. Personalmente, me gustaría una funcionalidad de alias para los desencadenantes como se indica aquí también.

Esperemos que SirVer (el responsable de UltiSnips) también lo piense y lo incluya en el futuro :)

cbaumhardt
fuente
5

Aunque no existe una sintaxis específica para los alias, puede lograr el mismo efecto utilizando 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

En este archivo de fragmentos, el activador incexites un "alias" del activador incstdlib. En realidad se incexitexpande incstdliby expand(snip)se llama cuando UltiSnips se mueve al tabulador $1. El expand(snip)solo ejecuta la función VimScript UltiSnips#ExpandSnippetque se expandirá incstdliben su forma expandida final #include <stdlib.h>.

Otra opción es utilizar el soporte de expresión regular UltiSnips en su lugar:

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

Aquí tendrá tres desencadenantes inctrue, incfalsey incboolque son efectivamente los mismos. El único inconveniente es que los complementos de autocompletado como YouCompleteMe no los completarán automáticamente.

ecerulm
fuente