Comment obtenir l'auto-complétion intelligente C ++

32

Certains éditeurs (tels que Visual Studio sur Windows) effectuent l'auto-complétion C ++ qui comprend le C ++. Par exemple, étant donné:

#include <vector>

int main(void) {
  std::vector<int> v;
  v.i

Dans Visual Studio, l'auto-complétion sait que la seule méthode std::vector<int>qui commence par un i est insert.

Est-il possible d’obtenir ce type de complétion automatique dans vim?

Chris Jefferson
la source
3
Le plug-in YouCompleteMe peut apprendre des termes pour l' auto-complétion et comprendre les langues de la famille C.
Alxndr
@alxndr La documentation était assez déroutante pour moi - pour une installation avec vundle. Et dès que j'ai commencé, le serveur YCM s'est écrasé!
Abhinav Gauniyal
YCM fonctionne relativement bien pour moi, à moins que je n’ai des objets de type heavy template (boost.geo) dans lesquels il ajoute de nombreuses traces de laod au système. Ma configuration est en désordre, difficile d'extraire des morceaux de YCM ...
johannes
@yo 'Cette question est assez spécifique à l'utilisation de vim avec C ++. Les solutions à ce problème ne s'appliqueront probablement pas à quelqu'un qui utilise Vim pour écrire Perl (et vice versa). Donc c ++ me semble bien; mais bien sûr, Vi et Vim Meta sont le bon endroit pour en discuter.
derobert
2
@AbhinavGauniyal Cela ressemble aux problèmes que j'ai vus auparavant avec l'utilisation de YCM. Vous êtes sur quel système? Pour OSX, voir ici . Je n'utilise pas MacVim, mais j'ai installé CMake avec Homebrew. Ensuite, je suis cdentré dans le répertoire du plugin YCM ( ~/.vim/bundlepour moi), puis j'ai couru ./install --clang-completer.
bsmith89

Réponses:

28

J'aime vraiment clang_complete pour cela. Cela nécessite clang, et vous devez indiquer où se trouve libclang dans votre système. Après cela, cela fonctionne à merveille.

Les gens pourraient suggérer YouCompleteMe, mais pour être honnête, ce plugin est énormément bouffi pour ce qu'il dit, et il nécessite beaucoup trop d'étapes à installer. Je l'ai également eu segfault Vim à plusieurs reprises. Je ne pourrais pas être plus heureux avec clang_complete.

Voici ce que je reçois quand je tape v.:clang-complet

akshay
la source
4
D'accord. J'ai eu beaucoup de problèmes avec YCM (y compris les segfaults mentionnés). Et même après des heures de configuration, je ne l’ai jamais fait complètement.
CharlesL
1
Le serveur YCM est tombé en panne à plusieurs reprises, dans l'attente de clang_complete, voici des informations pertinentes pour les autres utilisateurs: github.com/Rip-Rip/clang_complete/blob/master/doc/…
Abhinav Gauniyal
1
J'ai eu l'inverse. YCM a bien fonctionné (même s'il s'agissait d'un PITA à installer), mais rien n'a jamais fonctionné ...
Sardathrion - Réintégration Monica
Pouvez-vous cacher tout cela afin que vous puissiez voir votre code quelques lignes plus bas?
Matt C
@ MatthewCliatt, cacher quoi? Le menu contextuel? Il n'y a rien de spécial dans le code. C'est juste en return 0dessous de ce menu contextuel.
Akshay
8

YouCompleteMe ( Link ) plugin a été un excellent travail pour moi. Il utilise libclang pour générer la fonctionnalité de saisie semi-automatique, fournissant un résultat précis.

Il a beaucoup de personnalisation, spécialement quand on travaille avec des drapeaux de compilation. Vous pouvez éditer le "générateur d'indicateurs" en modifiant un script Python par projet ( exemple ). Mais, pour moi, le principal avantage est qu’il prend en charge la base de données de compilation Clang ( Link! ). Cela signifie que vous pouvez compiler votre code normalement et demander à clang de cracher tous les indicateurs utilisés pour la compilation, et d'utiliser ces indicateurs avec YouCompleteMe. Très pratique si vous souhaitez que votre outil de complétion automatique connaisse vos définitions de macros ou l'emplacement de tous les fichiers d'en-tête de votre système sans effort de saisie manuelle.

Allan Hasegawa
la source
3

YouCompleteMe n’est pas si difficile à installer, et c’est assez stable pour moi, j’ai migré de clang_complete à YouCompleteMe il ya plusieurs années. Une chose que je suis d’accord, c’est en effet une énorme histoire de validations, de nombreuses dépendances internes et une prise en charge de nombreuses langues qui pourraient ne pas vous intéresser, mais qui finiront tout de même par cloner ses sous-modules associés. Ça, c'est un problème avec YouComplemeMe, quand même ... ça fait le travail.

J'ai travaillé sur un fork avec un but spécial pour mieux supporter le C ++, vous pouvez voir ce gif le montrer:

https://s3.amazonaws.com/f.cl.ly/items/1e2F0A123h331c1G0L0R/SadBart.gif

Il exploite les nouvelles informations de paramètres que Clang est en mesure de fournir. Pour en savoir plus à ce sujet, consultez cet article: http://nosubstance.me/articles/2015-01-29-better-completion-for-cpp/ .

pepper_chico
la source
Aujourd'hui, j'utilise plutôt coc.nvim + ccls.
pepper_chico le