Aynı snippet için birkaç tetikleyiciyi nasıl kullanabilirim?


11

Farklı tetikleyiciler vermek istediğim bir pasaj yaptım, bunun yerine şunu triggerda tetiklemek istiyorum myothertrigger:

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

Parçacığı kopyalamak yerine bunu yapmanın kolay bir yolu var mı?

Düzenleme: Açıkça, UltiSnips kullanıyorum , ama daha iyi bir eklenti varsa ben içine bakmak olabilir.


2
Yanıt, kullandığınız snippet motoruna bağlı olacaktır. Mu-template ile bir snippet'i diğerinden ekleyebilir, snippet dosyasını farklı bir adla kopyalayabilir veya sadece sembolik bir bağlantı oluşturabilirsiniz. Diğer motorların buna izin verebileceğinden emin değilim. Bir gün "arayan" snippet'lerden snippet dahil etmeyi desteklemeye gelirlerse olabilir. Parçacıklarınızın çekirdeğini bir python veya viml işlevinde tanımlayabilir ve parçacıklarınızın aynı işlevi çağırmasını isteyebilirsiniz?
Luc Hermitte

3
Soru olarak etiketlendi plugin-ultisnips, bu yüzden OP ultisnips kullanıyor varsayalım.
EvergreenTree

Hatam ^^ '(µTemplate daha iyi değil, sadece çok farklı, daha eski ve ihtiyaçlarıma daha uygun (bunu koruyorum): Üretmek için farklı seçeneklerle çağırabileceğim işlevler gibi davranan snippet'leri köklendiriyorum farklı ama çok yakın şeyler.Eg ++, temel sınıf, değer sınıfı, istisna sınıfı için snippet'lerim var ... hepsi aynı sınıf snippet'i + işlev-snippet + setine bağlı ... Ama söylediğim gibi, sözdizimi tamamen farklıdır ve yer tutucu özelliği alışkın olduğunuzdan daha az ergonomiktir. Aradığınızı yapmak kolay olurdu, ancak bir göçe gerek yok)
Luc Hermitte

2
Shougo'nun neosnippeteklentisine geçerseniz , sözdiziminin aliasbu amaçla bir anahtar kelimesi vardır .
VanLaser

Yanıtlar:


8

Şu anda bunu UltiSnips'te yapmanın bir yolu yok. Bir yoktur Github açık özellik isteği olsa bunun için. Şahsen, burada da belirtildiği gibi tetikleyiciler için bir takma ad işlevselliği istiyorum .

Umarım SirVer (UltiSnips'in koruyucusu) da öyle düşünür ve geleceğe dahil eder :)


5

Diğer adlar için belirli bir sözdizimi olmamasına rağmen, aşağıdakileri kullanarak aynı etkiyi elde edebilirsiniz 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

Bu parçacıklar dosyasında tetikleyici incexit, tetikleyicinin "takma adıdır" incstdlib. Gerçekte incexit, UltiSnips sekmeye taşındığında buna genişler incstdlibve expand(snip)çağrılır $1. expand(snip)Sadece VimScript işlevini yürütür UltiSnips#ExpandSnippetgenişleyecektir incstdlib's nihai genişletilmiş forma #include <stdlib.h>.

Başka bir seçenek, bunun yerine UltiSnips normal ifade desteğini kullanmaktır:

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

Burada üç tetikleyici olur inctrue, incfalseve incboolbu da geri aynıdır. Tek dezavantajı, YouCompleteMe gibi otomatik tamamlama eklentilerinin bunları otomatik tamamlamamasıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.