Vim: Rendre L'Auto-Completion Plus Intelligente

j'utilise des ctags, taglist, etc., d'avoir l'auto-complétion dans Vim. Cependant, il est très limité par rapport à Visual Studio intellisense ou Eclipse auto-completion. Je me demande s'il est possible d'accorder Vim à:

  1. Afficher l'auto-complétion à chaque fois . ou -> saisie. Mais seulement après un certain texte qui pourrait être une variable (par exemple éviter d'afficher l'achèvement automatique après un nombre).

  2. afficher la fonction paramètres quand ( est tapé.

  3. arrêtez de supprimer la liste d'achèvement automatique lorsque certains suppriment tous les caractères après . ou ->: lorsque j'entre un nom de variable, puis appuyez . ou -> pour rechercher un certain membre, je dois souvent supprimer tous les caractères que je tape après le . or ->, mais cela fait cacher à Vim la liste d'achèvement automatique. Je voudrais le garder visible à moins d'appuyer sur Esc.

  4. montrant l'auto completion: quand je tape une variable et que j'appuie sur ^X ^O, elle me montre habituellement toutes les balises du fichier ctags. Je voudrais qu'il ne montre que les tags liés à la variable.

Merci pour l'aide.

EDIT : certaines personnes votent pour cette question, mais aucun corps ne semble connaître la réponse. Donc je voulais juste mentionner que vous n'avez pas à fournir une réponse complète; des réponses partielles à l'un des les points mentionnés seraient également bons.

70
demandé sur Rafid 2011-01-03 12:34:45

7 réponses

AutoComplPop est ce dont vous avez besoin.

21
répondu romainl 2011-01-03 15:50:36

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

15
répondu Benjamin Bannier 2011-01-03 15:30:39

pour que vim déclenche un certain comportement quand une clé est pressée, vous devez mapper la clé d'une fonction.

par exemple pour mapper la touche . pour appeler un certain type de completion en mode INSERT vous auriez besoin de faire:

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

et ensuite la fonction aurait besoin d'évaluer le contexte où elle a été appelée et de présenter une réponse appropriée à l'utilisateur.

Modifier : C'est la base du fonctionnement de clang complete mentionné par @honk.

Je ne suis pas sûr que vous puissiez personnaliser le comportement d'omnifunc pour répondre à vos besoins, mais d'après mon expérience, je ne suis jamais allé trop loin. Comme @Mikhail l'a dit, vous devez garder une trace des choses qui, dans la pratique, signifie interpréter ou même exécuter le code dans une certaine mesure.

8
répondu unode 2011-01-03 15:41:27

j'utilise vim tous les jours, et je ne suis pas au courant d'un script existant qui pourrait faire cela. Pour ce faire, il faudrait comprendre les classes et suivre les variables. someObject-> signifie que VIM connaîtrait la classe de la variable someObject et serait alors en mesure de rechercher des méthodes/variables à l'intérieur de cette classe.

écrire des scripts pour vim est relativement facile, bien que comme vous l'avez commenté - personne n'a encore répondu à cela. Jusqu'voter de moi.

5
répondu Mikhail 2011-01-03 15:06:51

j'aimerais avoir cette même fonctionnalité que vous recherchez et vient de tomber sur un plugin prometteur:

https://github.com/Shougo/neocomplcache semble comme il pourrait être le nouveau autocomplpop, et semble fonctionner assez bien pendant mes essais initiaux... maintenant, pour configurer l'achèvement omni pour travailler avec scala~

2
répondu neildaemond 2012-07-04 18:36:38

j'ai récemment découvert YouCompleteMe , il se comporte de la même façon que L'outil Visual Studio autocomplete. Une démonstration peut être vue ici:

https://www.youtube.com/watch?v=YuMyHAHF0xs

1
répondu warsong 2015-01-10 10:46:19

dans tous les cas, je recommande YouCompleteMe (YCM) . Il fournit (flou) l'appariement des identificateurs de votre fichier courant, ainsi que le chemin d'achèvement, l'intégration avec les moteurs d'achèvement externes,...

ad 1)

Si vous aimez l'achèvement sémantique d'eclipse, utilisez eclim pour intégrer vim avec eclipse. (alernatively utiliser un autre moteur sémantique pour YCM)

ad 2)

Ces 2 jouer bien ensemble btw.,: YCM peut même fournir la définition de fonction (= Liste de paramètres) de la fonction récemment terminée!

ad 3)

c'est ce que fait L'YCM de toute façon

ad 4)

pas tout à fait sûr, ce que vous entendez par là un. jamais utilisé ctags!

P. S.: je recommande fortement d'utiliser UltiSnips et Tagbar (et si vous aimez UndoTree ) de plus, ce qui fait de vim un IDE parfait pour moi.

1
répondu Florian 2015-05-07 11:01:02