Existe-t-il des plugins de saisie semi-automatique pour vim?


11

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?


1
ACP fonctionne très très bien ici et je n'ai aucun problème avec SnipMate. Il y a un paramètre ( let g:acp_behaviorSnipmateLength=-1voir :help autocomplpop) que vous êtes censé ajouter à votre .vimrc, l'avez-vous ajouté?
romainl

Réponses:


15

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 &omnifuncdans 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 .vimrcconfiguration complexe et NeoSnippet pour l'achèvement de l'extrait.

  • Une combinaison monstre de exuberant-ctagset 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.


6

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_finderet que vous tapez quelque chose comme ptflors de l'édition d'un fichier C ++, la liste des suggestions déroulantes inclura les deux printfet partition_finderparce qu'elles contiennent les mêmes lettres dans le même ordre. Si vous avez une variable appelée myBrain, vous pouvez taper brnet cela vous le suggérera. YouCompleteMe priorise également les suggestions en fonction de la fréquence d'utilisation précédente.


2

J'utilise neocomplcache avec les snipmate + snipmate snippets

let g:neocomplcache_snippets_dir='~/.vim/bundle/snipmate-snippets/snippets'

vous pouvez voir mon vimrc


2

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


1

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 à frapper ctrl+npour 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+npar parcourir la liste et vous pourrez continuer à taper, ou vous pouvez appuyer sur ESCpuis bcwpour aller bau début du mot incriminé et csuspendre l'ordre wà celui que vous vouliez.


Celui intégré de Vim semble être nul. Chaque fois que j'appuie sur <cx> <co>, il est simplement indiqué "Motif introuvable". Cependant, si j'appuie sur <cn>, les compléments apparaissent dans une liste déroulante juste en dessous du mot tapé. Est-ce la même chose? Existe-t-il un moyen de faire apparaître automatiquement la liste déroulante de saisie semi-automatique sans avoir à appuyer sur un raccourci?
trusktr

Je ne suis pas au courant d'un plugin qui fait apparaître la saisie semi-automatique sans interaction, désolé :(. <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 cela
Conrad.Dean

1
J'ai trouvé un plugin pour vim appelé YouCompleteMe qui fait apparaître le menu déroulant automatiquement lorsque vous tapez, et il prend en charge la sélection floue, donc si j'ai un identifiant appelé partition_finderet que je tape quelque chose comme ptflors de l'édition d'un fichier C ++, le menu déroulant proposera les deux printfet partition_findercar ils contiennent les mêmes lettres dans le même ordre. Si j'ai une variable appelée myBrain, je peux taper brnet 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/YouCompleteMe
trusktr

1

J'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 :)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.