Vim parçacıkları eklentileri arasındaki fark nedir?


25

Vim için çok sayıda snippet eklentisi var: ultisnips , snipmate , xptemplate , neosnippet ve daha fazlası.

Hepsinin artıları, eksileri ve az çok bağımlılıkları var. Şimdiye dek ultisnips kullanıyorum ancak bundan hiç memnun kalmadım.

Eklenti yöneticileri hakkında çok ilginç ve eksiksiz bir sorunuz olduğu için, snippet eklentileriyle ilgili aynı tür açıklamalara sahip olmanın oldukça yararlı olacağını düşünüyorum.

Burada iyi bir başlangıç ​​olabilecek bir liste var ama topluluğumuzun yazabileceği gibi bazı açık, net ve kesin cevaplar oldukça yararlı olacaktır.


1
Ayrıca Marc Weber wiki'de
Luc

2
IMHO bu, belki de "bununla hiç bir zaman tam olarak tatmin olmadım" konusunda ayrıntılı bilgi verirseniz oldukça geneldir. Shougo'nun "neosnippet.vim" dosyasını kullanıyorum.
VanLaser

wiki'yi buradaki bilgilerle güncellemelisiniz Teşekkürler.
Christian Brabandt

@ ChristianBrabandt: Biraz zamanım olacak en kısa sürede (önümüzdeki birkaç gün içinde) güncelleyeceğim.
statox

Yanıtlar:


22

Birkaç haftadır ultisnip kullanıyorum .

Bu eklentinin ana avantajları şunlardır:

  • Çok sayıda snippet ile bile oldukça hızlı.
  • Yeni bir pasajı tanımlamanın temel sözdizimini anlamak kolaydır, böylece yapmak istediğiniz şeyi yaparak hızlı bir şekilde yeni bir pasaj oluşturmak kolaydır. (Daha karmaşık snippet'ler için bazı ek işler gerekebilir.)
  • Kutunun dışında çok iyi çalışıyor; temel bir yapılandırma, snippet'leri çok hızlı bir şekilde kullanmanızı sağlar.
  • Gerçekten yapılandırılabilir. Temel konfigürasyon iyi çalışıyor olsa bile, güçlü bir kullanıcıysanız, gerçekten çok hassas bir şekilde ayarlayabilirsiniz.

Her şeyden önce ultisnips, bir parçacığın motorudur; bu, eklentinin, snippet kullanma özellikleri sağlar, ancak snippet'lerin kendilerini sağlamadığı anlamına gelir. Snippet'leri almak için, yazar vim-snippet'lerini önerir .

Her iki eklentiyi de yükledikten sonra snippet'lerinizi kullanabilirsiniz.

Snippet'ler: tanımları desenleri aşağıdaki adlı dosyalarda saklanır ft.snippets, ft_*.snippetsya ft/*, nerede ftşimdiki belgenin filetype '' ve *boş dize içeren bir kabuk gibi joker eşleştirme herhangi bir dizedir. (Gibi noktalı filetype sözdizimi cuda.cppdesteklendiğini unutmayın.)

Bu şekilde bir dosya türüne özgü snippet'ler yalnızca arabellek dosya türü ayarlandığında genişletilir. allTüm tamponlarda genişletilmiş snippet'leri oluşturmak için özel bir dosya türü mevcuttur.

Vim-snippet'lerin sağladığı snippet'lere ek olarak, kullanıcı kendi snippet'lerini tanımlayabilir. Benim tavsiyem onları ~/.vim/my-snippets/Ultisnipsbu şekilde dizine yerleştirmek olacaktır. Ultisnips onları ek konfigürasyona gerek kalmadan bulabilir ve bir dotfile deposunda tutmaları kolaydır.

Snippet'leri genişletmek için Ultisnips g:UltiSnipsExpandTrigger , genişletmeyi tetikleyecek olan eşlemeyi tanımlayan bir değişken sağlar (benim **için oldukça uygun olanı seçtim ). Entegrasyonun mümkün olması gerektiğine dikkat edin, ancak tek başıma test etmedim).

Uzman kullanıcılar için Ultisnips, genişletme davranışını özelleştirmek veya farklı bir şekilde tetiklemek için de bazı işlevler sunar. Görmek:h UltiSnips-trigger-functions


Bu gerçekten çok kullandığım ilk pasaj yöneticisi ve sanırım bunun kutudan çıktığı basitliği ve ayarlanması için iyi bir başlangıç.

Sonunda, eklentiye iyi bir giriş sağlayan bir ekran listesidir:


>Önceden boşluk ile VEYA (HTML'nin kapanış ayracında olduğu gibi) olmadığı sürece, tetikleme sırasında genişletilmemesi için nasıl yapıldığını biliyor musunuz . iO zaman seçenek o zaman onu iyi
yapmaz

12

Vim'i kullanmaya başladığımdan beri orijinal SnipMate'i kullanıyorum.

  • Dış bağımlılıkları yok.
  • Çok basit bir sözdizimi kullanır.
  • Kurulumu çok kolaydır.
  • 2009'dan beri terk edildi.

Şikayet edecek hiçbir şeyim yok.


16
İlk defa terk edilmeyi bir özellik olarak bahseden birini gördüm. : D
muru

6
Terk edilmiş bir proje istikrarlı bir projedir. Yerel örneğinizin güncel olmadığı veya bir API değişikliği ile iş akışınızı kesen bir güncelleme hakkında endişelenmenize gerek yok. Kurduğunuzda ihtiyaçlarınızı karşılarsa, sonsuza dek yapmaya devam eder. İhtiyaçlarınız değişmediği sürece. Kararlılık, herhangi bir araçta aradığım 1 numaralı özelliktir .
romainl

3
"Eğer kurduğunuzda ihtiyaçlarınızı karşılarsa, sonsuza dek yapmaya devam edecek. İhtiyaçlarınız değişmediği sürece." Ya da bir hata bulursunuz, bu noktada kendiniz düzeltmeniz, düzeltecek başka birisini bulmanız veya bir alternatif aramanız gerekir; belki de terk edilmemiş bir tane.

1
Cevabınız @romainl için teşekkürler! Bir sorum var: Eklentinin terk edildiğini söylediniz, ancak benioku oldukça aktif görünen daha yeni bir sürüme yönlendiriyor ve birkaç komisyon bazı şeyleri düzeltmek için görünüyor, yenisini kullanmak daha iyi değil mi?
statox

1
Hoş olmayan bir giriş deneyimi için UltraSnips'te birkaç hata ve dokümantasyon hatası var. Sonunda çalışmaya başladıktan sonra SnipMate'i kontrol etmeye karar verdim ve @ romainl'in kararlılık konusundaki argümanını anlayabiliyorum.
chb

7

Burada mu-template özelliklerinin bir listesi . Açıklama: Ben onun koruyucusuyum.

  • Şablon dosyaları genişletilebilir:
    • Yeni bir tamponu açarken otomatik olarak (.
    • açıkça menülerden veya komut satırından,
    • INSERT modundan snippet benzeri bir tarzda;
    • VISUAL modundan seçimi bir snippet ile çevrelemek için - surround, snippet'teki farklı bölgelere uygulanabilir (örneğin bir whilekontrol ifadesindeki kod veya koşul bölgeleri );
  • Tüm snippet'ler kendi şablon dosyalarında tanımlanır - diğer tüm snippet motorları, filetype başına bir dosya kullanır ve tüm snippet'leri içine koyar;
  • Şablon dosyaları kullanıcı tarafından veya belirli bir proje kapsamında geçersiz kılınabilir;
  • Dosya tipine özgü snippet'ler INSERT modu için tanımlanabilir (bunlar kalıtsal olabilir, örneğin C snippet'leri C ++, Java vb. Kullanılabilir), eşleşen snippet'lerin listesi her snippet için bir ipucu ile sunulur;
  • Bilgisayarlı VimL ifadeleri eklenebilir;
  • Genişletme sırasında VimL komutları çalıştırılabilir - Otomatik olarak eksik içerikleri eklemek veya ifadeleri içe aktarmak için kullanırım;
  • Şablon dosyaları, diğer şablon dosyalarını fonksiyon benzeri bir şekilde içerebilir (parametreler bile desteklenir) - AFAIK, çok az snippet motoru bunu uygular; bu özellik ;
  • Yer tutucuları sistemime tamamen entegre;
  • Yeniden girinti (istenirse) ve Python girintisini destekler;
  • Vim katlama ile iyi çalışır;
  • I18n dostu;
  • Birkaç parçacık eşleştiğinde, gelişmiş bir tamamlama menüsü açılır (YouCompleteMe açılır menüsünden esinlenmiştir);
  • Stil seçenekleri otomatik olarak uygulanır (eğer parantez tercih edersiniz nasıl? if (...) {\n}? if (...)\n{\n}Başka bir şey?), Ve tabii ki, bunlar ince mevcut proje veya geçerli filetype, hatta ikisi bağlı ayarlanabilir;
  • Eklenti% 100 VimL'dir. Python şablon dosyasından da kullanılabilir.
  • mu-template iki kütüphane eklentisine (lh-vim-lib ve lh-dev) ve yer tutucu sistemime (lh-brackets) bağlıdır - bu yüzden beyan eden dosyaları verirken VAM veya VimFlavor ile kurmanızı tavsiye ederim. bağımlılıklar;
  • Lisans, kod oluşturma ile uyumludur; yani, mu şablonu kodu GPLv3 altındayken, snippet'ler değil, bunları özel kodda kullanabileceğiniz anlamına gelir: bazı snippet'ler, Boost Yazılım Lisansı altındadır;

  • Genişletme, mevcut herhangi bir yerel vimrcs yüklendikten sonra gerçekleşir - genişletme yapılmadan önce projeye özgü değişkenleri ayarlamak için.

  • Tom Link'in StakeHolders eklentisi sayesinde, µTemplate'in yer tutucuları bağlandı (adlandırılmış yer tutucuyu değiştirmek, aynı ada sahip diğer yer tutucuları değiştirir). Takma yapmamak Paydaşların µTemplate kullanmasını engellemeyeceksiniz.

Dürüst olmak gerekirse, şablon sözdizimi biraz hantaldır ve yer tutucu sistem ilk yer tutucu nesiller arasındadır - mu-şablonu Vim için en eski şablon / parçacık motorlarından biridir.

Ancak, snippet'lerin geçersiz kılınabilecek veya değiştirilemeyen diğer snippet'leri (koşullu ve parametreli) dahil etmesine izin vermesi oldukça önemlidir. Tipik uygulamalar

  • C ++ dosya şablonu

    1. bir dosya başlığı içerir (doğru telif hakkı bildirimini eklemek için genellikle her proje için farklı şekilde ayarlanmış)
    2. sonra geçerli dosya türüne (.h, .cpp veya birim sınama dosyası) en uygun şablonu yükleyin
      • Başlık dosyasında, yeniden yerleştirme önleme korumaları dahil edilecek - hesaplanma biçimleri geçersiz kılınabilir (yine proje politikalarını takip etmek için)
      • .cpp dosya durumunda, eşleşen .h dosyası bulunursa otomatik olarak dahil edilir
  • Lh-cpp dilinde genel bir snippet / sihirbazı var. Ve bu ortak sınıf şablonunu kullanan, ancak farklı parametreleri olan birkaç uzmanlık sınıfı .


Cevabınız için teşekkürler! Bir sorum var: All snippets are defined in their own template-file -- all other snippet engines use one file per filetype and put all snippets in it Bu mimarinin, normal olana göre (yani bir dosya türünden) ne avantajı olduğunu söylediniz ?
statox

@statox diyebilirim, bu bir snippets bakım konusudur. Bazı pasajlar aşırı derecede karmaşık. Mesela lh-cpp'ye bir bakın internals/class-skeleton. Kontrol ifadesi parçacıklarıyla karışmamasını tercih ederim. Ancak itiraf etmeliyim ki, tüm kontrol ifadelerinin bir arada olması bu sorunlu olmaz. Üstelik bu yaklaşım sayesinde, çok kolay vb fonksiyonlar gibi bunları kullanmak, anında bunları güncellemek, benim parçacıkları geçersiz kılabilir
Luc Hermitte

Aslında, bağlantınızı gördüğümde neden bazı snippet'lerin kendi dosyalarında daha iyi yaşadıklarını anlayabiliyorum. Açıklamalarınız için teşekkürler.
statox

1
@statox Aslında, birçok parçacığı karmaşık olma eğilimindeyim: mümkün olduğu kadar akıllı şeyleri algılar, çıkarır ve yapmaya çalışırlar. Kodu çoğu zaman otomatik olarak yüklenen işlevlere taşıyorum, ancak bazen birbirlerini çağıran birkaç parçacık kullanmak daha mantıklı geliyor (ve proje ihtiyaçları için ayarlanabilecek varyasyon noktaları -> telif hakkı ifadeleri, ...)
Luc Hermitte

4

SnipMate ve UltiSnips, Vim için en popüler iki snippet motorudur. Her ikisi de TextMate'in snippet sözdiziminden ilham almıştır. UltiSnips, tüm SnipMate snippet'lerini çalıştırabilir ancak daha güçlü hale getirmek için ek sözdizimine de sahiptir.

İyi bir kural, Vim'iniz python desteğine sahipse, UltiSnips kullanın. Değilse, SnipMate'i kullanın.

Benim içinde .vimrc, ben (Plug kullanarak) ya piton olmamasına bağlı eklentisi yükleyin.

if (has('python') || has('python3'))
    Plug 'SirVer/ultisnips'
else
    Plug 'garbas/vim-snipmate'
    Plug 'MarcWeber/vim-addon-mw-utils' "required for snipmate
    Plug 'tomtom/tlib_vim' "required for snipmate
endif

UltiSnips, pasajında ​​piton kodları çalıştırabilir ve bazı harika numaralar yapmasını sağlayabilir. Bu, bir metnin çevresine bir kutu çizen en sevdiğim snippet'imden biri ( LaTeX ve Vim | Gilles Castel ile matematik derslerinde nasıl not alabildiğimden )

snippet box2 "Box"
`!p snip.rv = '┌' + '─' * (len(t[1]) + 2) + '┐'`
│ $1 │
`!p snip.rv = '└' + '─' * (len(t[1]) + 2) + '┘'`
$0
endsnippet

Bu kod parçasında bunun gibi bir şey çıktısını alabilirim:

┌─────────────────────┐
│ this is a cool box! │
└─────────────────────┘
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.