C'est une vieille question, mais j'y reviens de temps en temps avec une lueur d'espoir qui s'estompe, pensant qu'un jour je trouverai la bonne combinaison de plugins pour me donner une parfaite autocomplétion dans Vim. La recherche continue, mais c'est toute la recherche que j'ai faite au cours de plusieurs années.
Tout d'abord, vous devez comprendre que Vim est un éditeur de texte, pas un éditeur de code. Les éditeurs de code, IDES, sont des outils comme la suite d'outils Jetbrains, Visual Studio Code, Eclipse, etc.
Vim ne peut fondamentalement pas "saisir automatiquement" le code avec précision. La saisie semi-automatique nécessite une introspection de votre code source et une analyse de l'AST. Considérez que Vim ne pouvait pas faire d'opérations asynchrones jusqu'à la sortie de Vim 8 en 2016, donc essayer d'exécuter n'importe quel type de logiciel d'introspection de code dans un plugin Vim serait un cauchemar. Cela fait partie de l'histoire de l'écosystème Vim de ne pas le faire. Et tous ceux qui tentent de le faire, comme Tern For Vim, sont en effet des cauchemars à utiliser.
Le mieux qu'un éditeur de texte puisse faire est d'extraire et de compléter les mêmes mots / lignes / etc. qu'il connaît. Si vous cherchez à saisir du code automatiquement, vous devez utiliser un éditeur de code, pas un éditeur de texte.
Ce sont vos options, dont j'ai tout essayé:
Deux raccourcis clavier utiles sont Ctrl- n, qui complèteront automatiquement un mot basé uniquement sur les tampons actuels que vous avez ouverts (pas d'introspection de code), et Ctrl- xCtrl- lqui complètera automatiquement une ligne complète de code si vous souhaitez en dupliquer un. Vous savez probablement Ctrl- xCtrl- f, qui complétera automatiquement un nom de fichier incluant le chemin, par rapport au courant :pwd
. Le plugin pattern-complete peut être légèrement utile si vous ne recherchez pas avec /\v
.
Construit dans Vim " Omnicompletion " déclenché par Ctrl- x, Ctrl- o(c'est ce que les auteurs de Vim veulent que vous tapiez à chaque fois) avec un tas de plugins spécifiques à la langue , s'ils existent. Vous pouvez :echo &omnifunc
dans un fichier pour voir si vous avez déjà configuré Omnicompletion par Vim dans votre fichier de choix.
AutoComplPop pour ouvrir automatiquement le menu Omnicompletion ci-dessus lors de la frappe.
SuperTab qui vous permet d'appuyer Tabpour déclencher l'achèvement intégré de Vim.
NeoComplCache qui est l'achèvement des mots clés (en quoi il diffère de l'achèvement intégré de Vim n'est pas spécifié), une .vimrc
configuration complexe et NeoSnippet pour l'achèvement de l'extrait.
Une combinaison monstre de exuberant-ctags
et DoctorJS
(un projet Mozilla mort depuis un an), TagBar et un truc fait maison pour extraire l'achèvement des fichiers de balises.
SnipMate , un plugin de complétion de balise de base, avec des extraits , et découvrez par vous-même comment ajouter des extraits, car c'est un peu délicat.
UltiSnips avec UltiSnips-Snippets qui sont différents des extraits ci-dessus.
Tern pour VIM , une bibliothèque prometteuse qui fait l' introspection de code réel pour obtenir autocomplete correct. Cependant, il est bogué, très lent, a des fuites de mémoire qui planteront Vim, et peut-être même un abandonware.
YouCompleteMe , une complétion floue au fur et à mesure que vous exécutez un serveur en arrière-plan, ainsi qu'une fonction développée à la maison pour la complétion des extraits.
Eclim - une noble tentative pour exécuter un serveur Eclipse en arrière-plan et dire à Vim les autocomplétions qu'il introspecte à la volée. Cela fonctionne aussi bien que Tern.
Enfin, closeTag ou delimitMate ou autoclose ou un bananagram-Home Grown pour la fermeture automatique des balises et entre parenthèses automatiquement la saisie.
Presque tous les plugins de cette liste entreront en conflit avec presque tous les autres plugins de cette liste.
YouCompleteMe semble être le leader du pack, mais je n'ai jamais réussi à le faire fonctionner correctement avec la complétion des balises, et sa complétion d'introspection de code n'a pas encore prouvé sa puissance.
Mon opinion personnelle est que l'état actuel du monde de l'autocomplétion Vim est en mauvais état. Pour les petits projets, vous pourriez bien utiliser l'une des solutions ci-dessus. Si vous avez affaire à une API simple que vous pouvez garder la plupart du temps dans votre tête, l'achèvement sans introspection de code sera probablement correct. Si vous avez affaire à un grand projet ou si vous avez besoin de bénéficier de la sécurité des types lors de la programmation, un IDE complet ( Eclipse , Visual Studio , WebStorm ) vous conviendra beaucoup mieux que Vim.
L'inconvénient d'un IDE, bien sûr, est que vous n'aurez plus le pouvoir de Vim à portée de main. Je n'ai pas utilisé un seul IDE disposant d'un mode Vim acceptable.
Vim a un biais de langue modéré vers les langages de type C non typés, et s'attend autrement à ce que les fonctionnalités spécifiques à la langue soient ajoutées par les utilisateurs en tant que plugins. Malheureusement, cela a conduit à un écosystème d'auto-complétion éclaté. Certaines options sont décentes, mais rien n'est parfait, et il y a rarement un leader majoritaire / une meilleure pratique.
let g:acp_behaviorSnipmateLength=-1
voir:help autocomplpop
) que vous êtes censé ajouter à votre .vimrc, l'avez-vous ajouté?