web-dev-qa-db-fra.com

Vim: rendre la saisie semi-automatique plus intelligente

J'utilise ctags, taglist, etc. pour avoir la complétion automatique dans Vim. 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 de régler Vim sur:

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

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

  3. Arrêtez de supprimer la liste de saisie semi-automatique lorsque certains suppriment tous les caractères après. ou ->: Lorsque j'entre 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 d'appuyer sur Echap.

  4. Affichage de la complétion automatique associée: Lorsque je tape une variable et que j'appuie sur ^ X ^ O, cela me montre généralement toutes les balises du fichier ctags. J'aimerais qu'il ne montre que les balises liées à la variable.

Merci pour l'aide.

MODIFIER : Certaines personnes votent pour cette question, mais aucun organisme ne semble connaître la réponse. Je voulais simplement 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.

73
Rafid

AutoComplPop est ce dont vous avez besoin.

21
romainl

Pour (1) lorsque vous travaillez avec C++ ou C clang complete est une option vraiment sympa

15
Benjamin Bannier

Pour que vim déclenche un certain comportement lorsqu'une touche est enfoncée, vous devez mapper la touche à une fonction.

Par exemple, pour mapper la clé . pour appeler un type de complétion en mode INSERT, vous devez faire:

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

puis la fonction devrait é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 sais pas si vous pouvez 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 devrez garder une trace des choses qui, dans la pratique, signifie interpréter ou même exécuter le code dans une certaine mesure.

8
unode

J'utilise vim tous les jours, et je ne connais aucun script existant qui pourrait faire cela. Cette action nécessiterait la compréhension des classes et le suivi des variables. someObject-> signifie que VIM connaîtra la classe de la variable someObject, puis pourra rechercher des méthodes/variables dans cette classe.

Écrire des scripts pour vim est relativement facile, bien que comme vous l'avez commenté - personne n'a encore répondu à cette question. Up vote de moi.

5
Mikhail

J'aimerais avoir la même fonctionnalité que vous recherchez et je suis juste tombé sur un plugin prometteur:

https://github.com/Shougo/neocomplcache on dirait que ce pourrait être le nouveau autocomplpop, et semble fonctionner assez bien pendant mes premiers essais ... maintenant pour configurer la complétion omni pour qu'elle fonctionne avec scala ~

2
neildaemond

Dans tous les cas, je recommande YouCompleteMe (YCM) . Il fournit une correspondance (floue) des identifiants de votre fichier actuel, ainsi que la complétion de chemin, l'intégration avec des moteurs de complétion externes, ...

annonce 1)
Si vous aimez l'achèvement sémantique d'Eclipse, utilisez eclim pour intégrer vim à Eclipse. (utiliser alternativement un autre moteur sémantique pour YCM)

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

annonce 3)
c'est ce que YCM fait de toute façon

annonce 4)
pas tout à fait sûr de ce que vous entendez par celui-là. jamais utilisé de ctags!

PS: je recommande fortement d'utiliser ltiSnips et Tagbar (et si vous aimez ndoTree ) en plus, ce qui fait de vim un parfait IDE pour moi.

1
Florian

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

1
warsong