Il existe un grand nombre de plugins d'extraits pour vim: ultisnips , snipmate , xptemplate , neosnippet et bien plus encore.
Ils ont tous des avantages et des inconvénients et plus ou moins de dépendances. Jusqu'à présent, j'utilise des ultisnips mais je n'en ai jamais été totalement satisfait.
Comme nous avons une question très intéressante et complète sur les gestionnaires de plugins, je pense qu'il serait assez utile d'avoir le même genre d'explications sur les plugins d'extraits.
Il y a une liste ici qui pourrait être un bon début mais des réponses complètes, claires et précises que notre communauté peut écrire seraient assez utiles.
plugin-ultisnips
snippets
statox
la source
la source
Réponses:
J'utilise les ultisnips depuis plusieurs semaines maintenant.
Je pense que les principaux avantages de ce plugin sont les suivants:
Tout d'abord, ultisnips est un moteur d'extraits qui signifie que le plugin fournit des fonctionnalités pour utiliser des extraits mais ne fournit pas les extraits eux-mêmes. Pour obtenir les extraits, l'auteur recommande vim-snippets .
Une fois les deux plugins installés, vous pourrez utiliser vos extraits.
Les snippets de définitions sont stockées dans des fichiers nommés motifs suivants:
ft.snippets
,ft_*.snippets
ouft/*
, oùft
est le « filetype » du document en cours et*
est une coquille générique correspondant à toute chaîne , y compris la chaîne vide. (Notez que la syntaxe de type de fichier en pointillés commecuda.cpp
est prise en charge.)De cette façon, les extraits de code spécifiques à un type de fichier ne sont développés que lorsque le type de fichier du tampon est défini. Un type de fichier spécial
all
est disponible pour créer des extraits étendus sur tous les tampons.En plus des extraits fournis par vim-snippets, l'utilisateur peut définir ses propres extraits. Ma recommandation serait de les placer dans le répertoire de
~/.vim/my-snippets/Ultisnips
cette façon, Ultisnips les trouvera sans configuration supplémentaire et il est facile de les conserver dans un référentiel dotfile.Pour développer les extraits, Ultisnips fournit une variable
g:UltiSnipsExpandTrigger
qui définit le mappage qui déclenchera l'expansion (j'ai choisi celle **qui me convient le mieux). Notez qu'une intégration devrait être possible mais je ne l'ai pas testée par moi-même).Pour les utilisateurs expérimentés, Ultisnips fournit également certaines fonctions pour personnaliser le comportement de l'extension ou pour la déclencher différemment. Voir
:h UltiSnips-trigger-functions
Il s'agit du premier gestionnaire d'extraits de code que j'ai vraiment beaucoup utilisé et je pense que c'est un bon début pour sa simplicité et sa possibilité d'être réglé.
Enfin, voici une liste de screencasts qui donnent une bonne introduction au plugin:
la source
>
(comme dans l'accolade fermante de HTML. Le fait qu'il ne le sache pas à la fin d'une balise est ennuyeux, car si j'active l'optioni
alors il fait en sorte qu'il le développe même si c'est au milieu d'un mot qui n'est pas bon.J'utilise le SnipMate d' origine depuis que j'ai commencé à utiliser Vim.
Je n'ai rien à redire.
la source
Voici une liste des fonctionnalités de mu-template . Discl.: Je suis son mainteneur.
while
instruction de contrôle);if (...) {\n}
?if (...)\n{\n}
Quelque chose d' autre?), Et bien sûr, ils peuvent être affinés en fonction du projet en cours, ou le type de fichier en cours, ou même les deux;La licence est compatible avec la génération de code - cela signifie que bien que le code mu-template soit sous GPLv3, les extraits ne le sont pas, vous pouvez les utiliser dans du code propriétaire: certains extraits sont cependant sous licence Boost Software;
L'expansion se produit après le chargement de tous les vimrcs locaux présents - afin de définir des variables spécifiques au projet avant que l'expansion ne soit effectuée.
Grâce au plugin StakeHolders de Tom Link, µTemplate a des espaces réservés liés (la modification d'un espace réservé nommé modifie les autres espaces réservés du même nom). Ne pas installer les parties prenantes ne vous empêchera pas d'utiliser µTemplate.
Pour être parfaitement honnête, la syntaxe du modèle est un peu lourde et le système d'espace réservé appartient à la première génération d'espaces réservés - mu-template est l'un des plus anciens moteurs de modèles / extraits de code pour Vim.
Cependant, le fait qu'il autorise les extraits de code à inclure d'autres extraits de code (conditionnellement et avec des paramètres) qui peuvent ou non être remplacés est très important. Les applications typiques sont
le modèle de fichier C ++
J'ai un extrait / assistant de classe générique dans lh-cpp. Et plusieurs types de classes spécialisées qui utilisent ce modèle de classe commun, mais avec des paramètres différents.
la source
All snippets are defined in their own template-file -- all other snippet engines use one file per filetype and put all snippets in it
quel est l'avantage de cette architecture par rapport à l'habituelle (ie un fichier par type de fichier)?internals/class-skeleton
par exemple. Je préfère ne pas le mélanger avec les extraits de commande. Mais je dois admettre que le fait d'avoir toutes les déclarations de contrôle ensemble ne serait pas si problématique. De plus, grâce à cette approche, je peux très facilement remplacer mes extraits de code, les mettre à jour à la volée, les utiliser comme fonctions, etc.SnipMate et UltiSnips sont les deux moteurs d'extraits de code les plus populaires pour Vim. Les deux sont inspirés de la syntaxe d'extrait de TextMate. UltiSnips peut exécuter tous les extraits SnipMate mais possède également une syntaxe supplémentaire pour le rendre plus puissant.
Une bonne règle de base est que si votre Vim prend en charge python, utilisez UltiSnips. Sinon, utilisez SnipMate.
Dans mon
.vimrc
, je charge (en utilisant Plug) l'un des plugins en fonction de la disponibilité de python.UltiSnips peut également exécuter des codes python dans son extrait, ce qui lui permet de faire des trucs sympas. Ceci est l'un de mes extraits préférés qui dessine une boîte autour d'un texte (de Comment je suis capable de prendre des notes dans des cours de mathématiques en utilisant LaTeX et Vim | Gilles Castel )
Avec cet extrait, je peux produire quelque chose comme ceci:
la source