Come posso utilizzare più trigger per lo stesso snippet?


11

Ho creato uno snippet che desidero dare diversi trigger, quindi invece di dire triggerche voglio anche attivarlo con myothertrigger:

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

C'è un modo semplice per farlo invece di copiare lo snippet?

Modifica: per essere chiari, sto usando UltiSnips , ma se c'è un plug-in migliore potrei esaminarlo.


2
La risposta dipende dal motore dello snippet che stai utilizzando. Con mu-template avresti potuto includere uno snippet da un altro, copiare il file dello snippet con un nome diverso o semplicemente creare un collegamento simbolico. Non sono sicuro che gli altri motori potrebbero permetterlo. Può darsi che un giorno arrivino a supportare l'inclusione di snippet dagli snippet "chiamanti". Forse potresti definire il nucleo del tuo snippet in una funzione python o viml e far sì che i tuoi snippet chiamino la stessa funzione?
Luc Hermitte,

3
La domanda è taggata come plugin-ultisnips, quindi suppongo che l'OP stia usando ultisnips.
EvergreenTree,

Il mio errore ^^ '(µTemplate non è migliore, solo molto diverso, più vecchio e più adatto alle mie esigenze (lo sto mantenendo): ho frammenti di root che si comportano come funzioni che posso chiamare con diverse opzioni per produrre cose diverse ma molto vicine.Eg in C ++ Ho frammenti di classe base, valore-classe, classe di eccezione ... che dipendono tutti dallo stesso insieme di frammenti di classe + frammenti di funzione + ... Ma come ho detto, la sintassi è completamente diversa, e la funzione segnaposto è meno ergonomica di quella a cui sei abituato. Fare ciò che stai cercando sarebbe facile, ma non necessariamente meriterebbe una migrazione)
Luc Hermitte,

2
Se passi al neosnippetplugin di Shougo , la sua sintassi ha una aliasparola chiave proprio per questo scopo.
VanLaser,

Risposte:


8

Attualmente non è possibile farlo in UltiSnips. Tuttavia, esiste una richiesta di funzionalità aperta su Github . Personalmente, vorrei una funzionalità alias per i trigger, come indicato anche qui .

Speriamo che anche SirVer (il manutentore di UltiSnips) lo pensi e lo includerà in futuro :)


5

Sebbene non esista una sintassi specifica per gli alias, puoi ottenere lo stesso effetto utilizzando 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

In questo file di snippet il trigger incexitè un "alias" di trigger incstdlib. In realtà si incexitespande incstdlibe expand(snip)viene chiamato quando UltiSnips si sposta sul tabstop $1. Il expand(snip)just esegue la funzione VimScript UltiSnips#ExpandSnippetche si espanderà incstdlibnella sua forma espansa finale #include <stdlib.h>.

Un'altra opzione è utilizzare invece il supporto delle espressioni regolari UltiSnips:

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

Qui si hanno tre trigger inctrue, incfalsee incboolche sta effettivamente lo stesso. L'unico inconveniente è che i plugin di completamento automatico come YouCompleteMe non li completeranno automaticamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.