73 votes

Vim: Faire De L'Auto-Complétion Intelligente

J'utilise ctags, taglist, etc., pour avoir l'auto-complétion dans Vim. Cependant, il est très limité par rapport à l'intellisense de Visual Studio ou Eclipse auto-complétion. Je me demande si il est possible de régler de Vim:

  1. Montrer l'auto-complétion à chaque fois . ou -> saisie. Mais seulement après un certain texte peut être une variable (par exemple, éviter de montrer de la saisie semi-automatique après un certain nombre).

  2. Afficher les paramètres de la fonction quand ( est tapé.

  3. Arrêter de retrait de la liste de saisie semi-automatique lorsque certains supprimer tous les caractères après . ou ->: Quand je tape un nom de variable, puis appuyez sur . ou -> à la recherche d'un certain membre, j'ai souvent de supprimer tous les caractères de type I après la . ou ->, mais cela rend Vim masquer la liste de saisie semi-automatique. Je voudrais le garder visible, sauf si j'appuie sur la touche Echap.

  4. Montrant liées à la saisie semi-automatique: Lorsque je tape une variable et appuyez sur ^X ^O, il me montre toutes les balises de la ctags fichier. Je voudrais qu'elle ne montrant que les balises associées à la variable.

Merci pour l'aide.

EDIT: Certaines personnes sont en train de voter pour cette question, mais personne ne semble connaître la réponse. Donc, je voulais juste dire que vous n'avez pas à fournir une réponse complète; des réponses partielles à l'un des points mentionnés ci-dessus serait bon également.

21voto

romainl Points 55506

AutoComplPop est ce que vous avez besoin.

15voto

Benjamin Bannier Points 11953

(1) lorsque l'on travaille avec C++ ou C clang complete est vraiment une bonne option

8voto

Unode Points 2299

Pour vim provoquer un certain comportement lorsque vous appuyez sur une touche, vous devez mapper la touche de fonction.

Par exemple, pour cartographier la touche . d'appeler un certain type d'achèvement lorsque en INSERT mode vous devez faire:

:inoremap <expr> <buffer> . MyFunction()

et puis la fonction devrait évaluer le contexte où il a été appelé et de présenter une réponse appropriée à l'utilisateur.

Edit: C'est la base de la façon dont clang complete mentionné par @honk œuvres.

Je ne suis pas sûr si vous pouvez personnaliser le comportement de omnifunc pour répondre à vos besoins, mais sur mon expérience, je ne suis jamais allé trop loin. @Mikhail dit, vous avez besoin de garder une trace des choses qui se traduit dans la pratique de l'interprétation ou même l'exécution du code dans une certaine mesure.

5voto

Mikhail Points 3536

J'utilise vim tous les jours, et je ne suis pas au courant de tout script qui peut faire cela. Cette action nécessite la compréhension de classes et de garder la trace des variables. someObject-> signifie que VIM savez ce qu'est la classe de la variable someObject est, et ensuite être capable de rechercher des méthodes/variables à l'intérieur de cette classe.

L'écriture des scripts vim est relativement facile, même si, comme vous l'avez commenté, personne n'a répondu à cette question, encore. Jusqu'voter de moi.

2voto

neildaemond Points 109

J'aimerais avoir la même fonctionnalité que vous recherchez et viens de tomber sur une prometteuse plugin:

https://github.com/Shougo/neocomplcache ressemble à ce pourrait être la nouvelle autocomplpop, et semble fonctionner assez bien lors de mes premiers essais... maintenant, pour configurer l'omni achèvement de travailler avec scala~

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X