Як я можу використовувати кілька тригерів для одного фрагмента?


11

Я зробив фрагмент, який хочу надати різні тригери, тому замість того, щоб сказати, triggerя також хочу його запустити myothertrigger:

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

Чи є простий спосіб зробити це замість копіювання фрагмента?

Редагувати: Щоб зрозуміти, я використовую UltiSnips , але якщо є кращий плагін, я можу розібратися в цьому.


2
Відповідь залежатиме від фрагмента двигуна, який ви використовуєте. З му-шаблоном ви могли б включити один фрагмент з іншого, скопіюйте фрагмент файлу під іншим іменем або просто створити символічне посилання. Я не впевнений, що інші двигуни можуть це дозволити. Можливо, якщо одного дня вони прийдуть підтримати включення фрагментів із фрагментів "виклику". Можливо, ви могли б визначити серцевину свого фрагмента у функції python або viml, а ваші фрагменти викликати ту саму функцію?
Люк Ермітт

3
Питання позначено як plugin-ultisnips, тому я б припустив, що ОП використовує ultisnips.
EvergreenTree

Моя помилка ^^ '(µTemplate не кращий, просто дуже різний, старший і більше підходить для моїх потреб (я його підтримую): у мене є кореневі фрагменти, які поводяться як функції, які я можу викликати з різними варіантами для створення різні, але дуже близькі речі. Наприклад, у C ++ у мене є фрагменти для базового класу, класу цінностей, класу винятків ..., які залежать від одного і того ж набору класу-фрагмента + функції-фрагмента + ... Але, як я вже сказав, синтаксис зовсім інший, а функція заповнення менше ергономічна, ніж та, до якої ви звикли. Робити те, що ви шукаєте, було б просто, але не потрібно міграції)
Люк Ермітт,

2
Якщо перейти на neosnippetплагін Shougo , його синтаксис має aliasключове слово саме для цієї мети.
VanLaser

Відповіді:



5

Хоча для псевдонімів не існує конкретного синтаксису, ви можете досягти такого ж ефекту, використовуючи 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

У цьому фрагменті файлу тригер incexitє "псевдонімом" тригера incstdlib. Насправді incexitрозширюється до incstdlibі expand(snip)викликається, коли UltiSnips рухається до табло $1. expand(snip)Просто виконує функцію VimScript , UltiSnips#ExpandSnippetяка буде розширюватися incstdlibв це остаточному розгорнутому вигляді #include <stdlib.h>.

Інший варіант - замість цього використовувати підтримку регулярного вираження UltiSnips:

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

Тут у вас буде три тригери inctrue, incfalseі incboolвони фактично однакові. Єдиним недоліком є ​​те, що плагіни автодоповнення, такі як YouCompleteMe, не заповнять їх автоматично.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.