Wie kann ich mehrere Trigger für dasselbe Snippet verwenden?


11

Ich habe ein Snippet erstellt, dem ich verschiedene Trigger geben möchte. Anstatt zu sagen, dass triggerich es auch auslösen möchte mit myothertrigger:

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

Gibt es eine einfache Möglichkeit, dies zu tun, anstatt das Snippet zu kopieren?

Bearbeiten: Um klar zu sein, ich verwende UltiSnips , aber wenn es ein besseres Plugin gibt, könnte ich das untersuchen.


2
Die Antwort hängt von der verwendeten Snippet-Engine ab. Mit mu-template können Sie ein Snippet aus einem anderen einfügen, die Snippet-Datei unter einem anderen Namen kopieren oder einfach einen symbolischen Link erstellen. Ich bin mir nicht sicher, ob die anderen Motoren dies zulassen könnten. Kann sein, dass sie eines Tages die Aufnahme von Snippets aus "Anrufer" -Snippets unterstützen. Vielleicht könnten Sie den Kern Ihres Snippets in einer Python- oder Viml-Funktion definieren und Ihre Snippets dieselbe Funktion aufrufen lassen?
Luc Hermitte

3
Die Frage ist mit markiert plugin-ultisnips, daher würde ich davon ausgehen, dass das OP Ultisnips verwendet.
EvergreenTree

Mein Fehler ^^ '(µTemplate ist nicht besser, nur sehr unterschiedlich, älter und besser auf meine Bedürfnisse zugeschnitten (ich behalte es bei): Ich habe Root-Snippets, die sich wie Funktionen verhalten, die ich mit verschiedenen Produktionsoptionen aufrufen kann verschiedene, aber sehr nahe Dinge. Zum Beispiel in C ++ habe ich Snippets für Basisklasse, Wertklasse, Ausnahmeklasse ... die alle von derselben Menge von Klassen-Snippet + Funktions-Snippet + abhängen ... Aber wie gesagt, Die Syntax ist völlig anders und die Platzhalterfunktion ist weniger ergonomisch als die, die Sie gewohnt sind. Das zu tun, wonach Sie suchen, wäre einfach, aber keine Migration wert.)
Luc Hermitte

2
Wenn Sie zum Shougo- neosnippetPlugin wechseln, hat die Syntax genau dafür ein aliasSchlüsselwort.
VanLaser

Antworten:


8

Derzeit gibt es in UltiSnips keine Möglichkeit, dies zu tun. Es gibt jedoch eine offene Feature-Anfrage auf Github dafür. Persönlich möchte ich eine Alias-Funktionalität für Trigger, wie auch hier angegeben .

Hoffen wir, dass SirVer (der Betreuer von UltiSnips) dies auch denkt und es in Zukunft einbezieht :)


5

Obwohl es keine spezifische Syntax für Aliase gibt, können Sie den gleichen Effekt erzielen, indem Sie Folgendes verwenden 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 dieser Snippets-Datei ist der Trigger incexitein "Alias" des Triggers incstdlib. In Wirklichkeit incexiterweitert sich incstdlibund expand(snip)wird aufgerufen, wenn UltiSnips zum Tabstop wechselt $1. Das expand(snip)führt nur die VimScript-Funktion aus, UltiSnips#ExpandSnippetdie incstdlibin die endgültige erweiterte Form erweitert wird #include <stdlib.h>.

Eine weitere Option ist die Verwendung der UltiSnips-Unterstützung für reguläre Ausdrücke:

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

Hier haben Sie drei Auslöser inctrue, incfalseund incbooldiese sind praktisch gleich. Der einzige Nachteil ist, dass Plugins für die automatische Vervollständigung wie YouCompleteMe diese nicht automatisch vervollständigen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.