Existe-t-il un plugin d'auto-complétion pour vim? Quelles sont mes options ici?
En ce moment, j'utilise AutoComplPop , mais il a une mauvaise intégration avec snipMate que j'utilise et très lent sur les fichiers Ruby (même <100 lignes).
J'ai vu quelques autres plugins, mais ils sont morts depuis au moins plus d'un an. Alors, des idées?
vim
autocomplete
naquad
la source
la source
let g:acp_behaviorSnipmateLength=-1
voir:help autocomplpop
) que vous êtes censé ajouter à votre .vimrc, l'avez-vous ajouté?Réponses:
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
etDoctorJS
(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.
la source
En voici une belle: YouCompleteMe
YouCompleteMe qui fait apparaître le menu déroulant automatiquement lors de la frappe et prend en charge la sélection floue, donc si vous avez un identifiant appelé
partition_finder
et que vous tapez quelque chose commeptf
lors de l'édition d'un fichier C ++, la liste des suggestions déroulantes inclura les deuxprintf
etpartition_finder
parce qu'elles contiennent les mêmes lettres dans le même ordre. Si vous avez une variable appeléemyBrain
, vous pouvez taperbrn
et cela vous le suggérera. YouCompleteMe priorise également les suggestions en fonction de la fréquence d'utilisation précédente.la source
J'utilise neocomplcache avec les snipmate + snipmate snippets
vous pouvez voir mon vimrc
la source
J'essaie necomplecache avec neosnippet Je suppose qu'il aura une meilleure intégration car les deux sont créés par la même personne
la source
Je crois que vim en a un intégré appelé OmniComplete. En mode insertion, utilisez
ctrl+x,ctrl+o
.Sinon, vous pouvez effectuer la saisie des mots clés à partir du mode insertion avec
ctrl+n
. Lorsque vous l'invoquez, il vous donnera une liste déroulante affichant les correspondances possibles des mots trouvés dans le fichier que vous modifiez, ainsi que des autres fichiers que vous avez ouverts. Continuez à frapperctrl+n
pour parcourir les options. Lorsque vous arrivez au mot que vous voulez, continuez simplement à taper comme d'habitude.Si vous ne trouvez pas le mot que vous voulez, vous finirez
ctrl+n
par parcourir la liste et vous pourrez continuer à taper, ou vous pouvez appuyer surESC
puisbcw
pour allerb
au début du mot incriminé etc
suspendre l'ordrew
à celui que vous vouliez.la source
<c-x><c-o>
Ne fonctionne que pour les choses que vim a été explicitement dit comment prendre en charge. Par défaut, je pense qu'il ne peut faire que quelques petites choses et des trucs comme la complétion CSS, mais si vous voulez quelque chose comme Eclipse, il y a quelques plugins vim qui essaient de vous fournir celapartition_finder
et que je tape quelque chose commeptf
lors de l'édition d'un fichier C ++, le menu déroulant proposera les deuxprintf
etpartition_finder
car ils contiennent les mêmes lettres dans le même ordre. Si j'ai une variable appeléemyBrain
, je peux taperbrn
et elle apparaîtra. YouCompleteMe priorise également les suggestions en fonction de la fréquence d'utilisation précédente. Découvrez-le ici: valloric.github.io/YouCompleteMeJ'ai créé un nouveau plugin SimpleAutoComplPop à partir de l'AutoComplPop d'origine. Cependant, je ne suis pas familier avec ruby ou snipMate, vous pouvez essayer et je suis heureux d'avoir des retours :)
la source