Bagaimana saya bisa menggunakan beberapa pemicu untuk cuplikan yang sama?


11

Saya telah membuat cuplikan yang ingin saya berikan pemicu yang berbeda, jadi alih-alih mengatakan triggersaya juga ingin memicunya dengan myothertrigger:

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

Apakah ada cara mudah untuk melakukan ini daripada menyalin cuplikan?

Sunting: Agar jelas, saya menggunakan UltiSnips , tetapi jika ada plugin yang lebih baik saya mungkin melihat ke dalamnya.


2
Jawabannya tergantung pada mesin snippet yang Anda gunakan. Dengan mu-template Anda bisa menyertakan satu snippet dari yang lain, menyalin file snippet dengan nama yang berbeda atau hanya membuat tautan simbolis. Saya tidak yakin mesin lain bisa mengizinkannya. Mungkin jika suatu hari mereka datang untuk mendukung penyertaan cuplikan dari cuplikan "pemanggil". Mungkin Anda bisa mendefinisikan inti cuplikan Anda dalam fungsi python atau viml dan minta cuplikan Anda memanggil fungsi yang sama?
Luc Hermitte

3
Pertanyaannya ditandai plugin-ultisnips, jadi saya akan berasumsi OP menggunakan ultisnips.
EvergreenTree

Kesalahan saya ^^ '(Ī¼Template tidak lebih baik, hanya sangat berbeda, lebih tua, dan lebih cocok dengan kebutuhan saya (saya mempertahankannya): Saya telah mem-root cuplikan yang berfungsi sebagai fungsi yang dapat saya panggil dengan berbagai opsi untuk menghasilkan hal yang berbeda tapi sangat dekat. Misalnya di C ++ saya punya cuplikan untuk kelas-dasar, kelas-nilai, kelas-pengecualian ... yang semuanya bergantung pada rangkaian kelas-snippet + function-snippet + yang sama ... Tapi seperti yang saya katakan, sintaksnya benar-benar berbeda, dan fitur placeholder kurang ergonomis daripada yang biasa Anda lakukan. Melakukan apa yang Anda cari akan mudah, tetapi bukan keharusan untuk migrasi)
Luc Hermitte

2
Jika Anda beralih ke neosnippetplugin Shougo , sintaksisnya memiliki aliaskata kunci untuk tujuan ini.
VanLaser

Jawaban:


8

Saat ini tidak ada cara untuk melakukan ini di UltiSnips. Ada terbuka fitur-permintaan pada Github untuk itu meskipun. Secara pribadi, saya ingin fungsi alias untuk pemicu seperti yang ditunjukkan di sini juga.

Mari berharap SirVer (pengelola UltiSnips) juga akan berpikir begitu dan memasukkannya di masa depan :)


5

Meskipun tidak ada sintaks khusus untuk alias, Anda dapat mencapai efek yang sama dengan menggunakan 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

Dalam file cuplikan ini pemicunya incexitadalah "alias" dari pemicu incstdlib. Pada kenyataannya incexitmengembang ke incstdlibdan expand(snip)disebut ketika UltiSnips pindah ke tabstop $1. The expand(snip)hanya mengeksekusi fungsi VimScript UltiSnips#ExpandSnippetyang akan memperluas incstdlibke bentuk akhir diperluas itu #include <stdlib.h>.

Pilihan lain adalah menggunakan dukungan ekspresi reguler UltiSnips sebagai gantinya:

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

Di sini Anda akan memiliki tiga pemicu inctrue, incfalsedan incboolitu sama saja. Satu-satunya kelemahan adalah bahwa plugin pelengkapan otomatis seperti YouCompleteMe tidak akan melengkapinya secara otomatis.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.