Istnieje wiele wtyczek dla vima: ultisnips , snipmate , xptemplate , neosnippet i wiele innych.
Wszystkie mają zalety i wady oraz mniej lub więcej zależności. Do tej pory korzystałem z ultisnips, ale nigdy nie byłem z tego całkowicie zadowolony.
Ponieważ mamy bardzo interesujące i kompletne pytanie dotyczące menedżerów wtyczek , myślę, że przydatne byłoby posiadanie tego samego rodzaju wyjaśnień na temat wtyczek fragmentów.
Jest tutaj lista , która może być dobrym początkiem, ale niektóre kompletne, jasne i precyzyjne odpowiedzi, jak nasza społeczność może pisać, byłyby bardzo przydatne.
plugin-ultisnips
snippets
statox
źródło
źródło
Odpowiedzi:
Używam ultisnips od kilku tygodni.
Myślę, że główne zalety tej wtyczki są następujące:
Przede wszystkim ultisnips to silnik fragmentów, co oznacza, że wtyczka zapewnia funkcje do używania fragmentów, ale nie zapewnia samych fragmentów. Aby uzyskać fragmenty, autor zaleca vim-snippets .
Po zainstalowaniu obu wtyczek będziesz mógł używać swoich fragmentów.
Fragmenty definicje są przechowywane w plikach o nazwach następujących wzorów:
ft.snippets
,ft_*.snippets
, lubft/*
, gdzieft
jest «filetype» bieżącego dokumentu i*
jest shell-jak wieloznacznym dopasowywania dowolny ciąg w tym pustym ciągiem. (Należy pamiętać, żecuda.cpp
obsługiwana jest składnia typu kropkowanego typu pliku ).W ten sposób fragmenty specyficzne dla typu pliku są rozwijane tylko wtedy, gdy ustawiony jest typ pliku bufora. Dostępny jest specjalny typ pliku
all
do tworzenia urywków rozszerzonych na wszystkie bufory.Oprócz urywków dostarczanych przez vim-snippets użytkownik może zdefiniować własne urywki. Zalecam umieszczenie ich w katalogu w
~/.vim/my-snippets/Ultisnips
ten sposób, aby Ultisnips je znalazł bez dodatkowej konfiguracji i łatwo jest je przechowywać w repozytorium plików kropkowych.Aby rozwinąć fragmenty, Ultisnips udostępnia zmienną,
g:UltiSnipsExpandTrigger
która definiuje mapowanie, które wyzwoli rozszerzenie (wybrałem **to, co jest dla mnie całkiem wygodne). Pamiętaj, że integracja powinna być możliwa, ale nie przetestowałem jej sam).Dla zaawansowanych użytkowników, Ultisnips udostępnia również niektóre funkcje, aby dostosować zachowanie rozszerzenia lub uruchomić go inaczej. Widzieć
:h UltiSnips-trigger-functions
Jest to pierwszy menedżer urywków, którego naprawdę szeroko używałem i myślę, że jest to dobry na początek ze względu na jego prostotę po wyjęciu z pudełka i możliwość dostrojenia.
Na koniec znajduje się lista screencastów, które stanowią dobre wprowadzenie do wtyczki:
źródło
>
(jak w nawiasie zamykającym HTML. Fakt, że nie wie, że na końcu znacznika jest denerwujący, ponieważ jeśli włączę opcjai
powoduje, że rozszerza go, nawet jeśli jest w środku słowa, które nie jest dobreUżywam oryginalnego SnipMate, odkąd zacząłem używać Vima.
Nie mam na co narzekać.
źródło
Oto lista funkcji z mu-template . Discl .: Jestem jego opiekunem.
while
instrukcji sterującej);if (...) {\n}
?if (...)\n{\n}
Coś innego?), No i oczywiście, mogą być dostrajane w zależności od aktualnego projektu, lub bieżącego typu pliku, albo nawet obu;Licencja jest kompatybilna z generowaniem kodu - oznacza to, że chociaż kod mu-template jest objęty GPLv3, fragmenty nie są, możesz używać ich w kodzie zastrzeżonym: niektóre fragmenty są jednak objęte licencją Boost Software License;
Rozwinięcie następuje po załadowaniu wszelkich lokalnych vimrcs - w celu ustawienia zmiennych specyficznych dla projektu przed wykonaniem rozwinięcia.
Dzięki wtyczce StakeHolders Toma Link, µTemplate ma powiązane symbole zastępcze (modyfikowanie jednego nazwanego symbolu zastępczego modyfikuje inne symbole zastępcze o tej samej nazwie). Brak instalacji Interesariuszy nie uniemożliwi korzystania z µTemplate.
Szczerze mówiąc, składnia szablonów jest nieco uciążliwa, a system symboli zastępczych należy do pierwszej generacji symboli zastępczych - mu-template jest jednym z najstarszych mechanizmów Vim'a dla szablonu / fragmentów kodu.
Jednak fakt, że pozwala fragmentom zawierać inne fragmenty (warunkowo i z parametrami), które mogą zostać zastąpione, jest dość ważny. Typowe zastosowania to
szablon pliku C ++
Mam ogólny fragment kodu / kreatora w lh-cpp. I kilka wyspecjalizowanych rodzajów klas, które korzystają z tego wspólnego szablonu klas, ale z różnymi parametrami.
źródło
All snippets are defined in their own template-file -- all other snippet engines use one file per filetype and put all snippets in it
jakie są zalety tej architektury w porównaniu do zwykłej (tj. Jeden plik według rodzaju pliku)?internals/class-skeleton
przykład na lh-cpp . Wolałbym, żeby nie mieszał się z fragmentami instrukcji sterujących. Ale muszę przyznać, że zebranie wszystkich oświadczeń kontrolnych razem nie byłoby tak problematyczne. Co więcej, dzięki takiemu podejściu mogę bardzo łatwo zastąpić moje fragmenty, aktualizować je w locie, używać ich jako funkcji itp.SnipMate i UltiSnips są dwoma najpopularniejszymi silnikami urywków dla Vima. Oba są inspirowane składnią fragmentu TextMate. UltiSnips może uruchamiać wszystkie fragmenty SnipMate, ale ma także dodatkową składnię, aby był bardziej wydajny.
Dobrą zasadą jest to, że jeśli twój Vim ma obsługę Pythona, użyj UltiSnips. Jeśli nie, użyj SnipMate.
W mojej aplikacji
.vimrc
ładuję (przy użyciu wtyczki) dowolną wtyczkę w zależności od dostępności języka Python.UltiSnips może także uruchamiać kody python we fragmencie, co pozwala mu robić fajne sztuczki. To jeden z moich ulubionych fragmentów, który rysuje ramkę wokół tekstu (od Jak mogę robić notatki z wykładów matematycznych przy użyciu LaTeX i Vim | Gilles Castel )
Za pomocą tego fragmentu mogę wypisać coś takiego:
źródło