Vim: rendre la complétion automatique plus intelligente

J’utilise ctags, taglist, etc. Cependant, il est très limité par rapport à l’auto-complétion de Visual Studio intellisense ou Eclipse. Je me demande s’il est possible d’accorder Vim à:

  1. Afficher la saisie automatique à chaque fois. ou -> sont tapés. Mais seulement après un texte qui pourrait être une variable (par exemple, éviter d’afficher l’achèvement automatique après un nombre).

  2. Afficher les parameters de la fonction lorsque (est saisi)

  3. Arrêtez de supprimer la liste d’achèvement automatique lorsque certains suppriment tous les caractères après. ou ->: lorsque je saisis un nom de variable, appuyez sur. ou -> pour rechercher un certain membre, je dois souvent supprimer tous les caractères que je tape après le. ou ->, mais cela fait que Vim masque la liste de complétion automatique. Je voudrais le garder visible à moins que j’appuie sur Esc.

  4. Affichage de l’auto-complétion: Lorsque je tape une variable et que j’appuie sur ^ X ^ O, elle affiche généralement toutes les balises du fichier ctags. Je voudrais l’avoir montrant uniquement 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. Je voulais juste mentionner que vous n’avez pas à fournir une réponse complète. des réponses partielles à l’un des points mentionnés seraient également bonnes.

AutoComplPop est ce dont vous avez besoin.

Pour (1) lorsque vous travaillez avec C ++ ou C clang complete est une très bonne option

Pour que vim déclenche un certain comportement lorsque vous appuyez sur une touche, vous devez mapper la clé sur une fonction.

Par exemple pour mapper la clé . d’appeler un certain type d’achèvement lorsque vous êtes en mode INSERT :

 :inoremap   . MyFunction() 

La fonction devra alors évaluer le contexte dans lequel elle a été appelée et présenter une réponse appropriée à l’utilisateur.

Edit : C’est la base de la façon dont clang complete mentionné par @honk works.

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 l’a dit @Mikhail, vous devez garder une trace de ce qui, dans la pratique, signifie interpréter ou même exécuter le code dans une certaine mesure.

J’utilise vim tous les jours, et je ne connais aucun script existant pouvant le faire. Cette action nécessiterait une compréhension des classes et le suivi des variables. someObject-> signifie que VIM saura quelle classe est la variable someObject , et pourra ensuite rechercher des méthodes / variables dans cette classe.

Ecrire des scripts pour vim est relativement facile, même si, comme vous l’avez dit, personne n’a encore répondu à cela. Up vote de moi.

J’aimerais avoir la même fonctionnalité que vous recherchez et que vous venez de trouver un plugin prometteur:

https://github.com/Shougo/neocomplcache semble être le nouvel autocomplpop et semble fonctionner assez bien lors de mes premiers essais … maintenant pour configurer l’achèvement complet afin de travailler avec scala ~

J’ai récemment découvert YouCompleteMe , il se comporte de manière similaire à l’outil de saisie semi-automatique de Visual Studio. Une démonstration peut être vue ici:

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

En tout cas, je vous recommande YouCompleteMe (YCM) . Il fournit une correspondance (floue) des identifiants de votre fichier actuel, ainsi que l’achèvement du chemin, l’intégration avec les moteurs d’achèvement externes, …

ad 1)
Si vous aimez l’achèvement sémantique de l’éclipse, utilisez eclim pour intégrer vim avec eclipse. (utilise toujours un autre moteur sémantique pour YCM)

ad 2)
Ces 2 jeux se combinent bien entre eux:. YCM peut même fournir la définition de la fonction (= liste de parameters) de la fonction récemment terminée!

ad 3)
c’est ce que fait YCM de toute façon

ad 4)
pas tout à fait sûr, ce que tu veux dire par celui-là. jamais utilisé ctags!

PS: Je recommande fortement d’utiliser UltiSnips et Tagbar (et si vous aimez UndoTree ), ce qui fait de vim un IDE parfait pour moi.