L'auto-complétion de Vim

en bref, je cherche une fonction qui fonctionne autocompletion pour l'éditeur Vim. J'ai fait valoir avant que Vim remplace complètement un IDE sous Linux et bien que ce soit certainement vrai, il manque une caractéristique importante: autocompletion.

je sais à propos de Ctrl + N , Exuberant Ctags intégration , Taglist , cppcomplete et OmniCppComplete . Hélas, aucun de ceux-ci ne correspond à ma description de "l'autocomplétion de travail: "

  • Ctrl + N" 1519150920 fonctionne bien (seulement) si vous avez oublié comment épeler class , ou while . Oh bien.
  • Ctags vous donne les rudiments mais a beaucoup d'inconvénients.
  • Taglist est juste un emballage Ctags et, en tant que tel, hérite de la plupart de ses inconvénients (bien qu'il fonctionne bien pour liste déclarations).
  • cppcomplete ne fonctionne tout simplement pas comme promis, et je ne peux pas comprendre ce que j'ai fait de mal, ou si elle "fonctionne" correctement et les limites sont par conception.
  • OmniCppComplete semble avoir les mêmes problèmes que cppcomplete, c'est à dire l'auto-complétion ne fonctionne pas correctement. De plus, le fichier tags doit de nouveau être mis à jour manuellement.

je suis conscient du fait que même les IDEs modernes et complets n'offrent pas de bonne fin de code C++. C'est pourquoi J'ai accepté le manque de Vim dans ce domaine jusqu'à maintenant. Mais je pense qu'un niveau fondamental d'achèvement de code n'est pas trop demander, et est en fait nécessaire pour une utilisation productive. Donc je suis chercher quelque chose qui peut accomplir au moins les choses suivantes.

  • syntaxe awareness . cppcomplete promesses (mais ne remet pas pour moi), la correction, la portée conscient de l'auto-complétion de ce qui suit:

    variableName.abc
    variableName->abc
    typeName::abc
    

    Et vraiment, tout le reste est complètement inutile.

  • configurabilité . J'ai besoin de spécifier (facilement) où sont les fichiers source, et donc où le script obtient ses informations d'auto-complétion. En fait, j'ai un Makefile dans mon répertoire qui spécifie les chemins include requis. Eclipse peut interpréter les informations qui s'y trouvent, pourquoi pas un script Vim?

  • l'actualité . Dès que je change quelque chose dans mon fichier, je veux que l'auto-completion reflète ceci. Je ne pas veulent déclencher manuellement ctags (ou quelque chose de comparable). En outre, les changements devraient être incrémental , c.-à-d. quand je n'ai changé qu'un seul fichier, c'est complètement inacceptable pour ctags pour re-analyser l'arbre du répertoire entier (qui peut être énorme).

ai-je oublié quelque chose? Hésitez pas à mettre à jour.

je suis à l'aise avec pas mal de configuration et/ou bricolage mais je ne je veux programmer une solution à partir de zéro, et je ne suis pas bon pour déboguer les scripts Vim.

une dernière remarque, j'aimerais vraiment quelque chose de similaire pour Java et C# mais je suppose que c'est trop espérer pour: ctags ne analyse que les fichiers de code et les deux Java et C# ont d'énormes cadres précompilés qui devraient être indexés. Malheureusement, developing. net without an IDE est encore plus un PITA que C++.

241
demandé sur Community 2009-07-12 15:38:19

7 réponses

Try YouCompleteMe . Il utilise Clang à travers l'interface libclang, offrant une complétion sémantique C/C++/Objective-C. C'est un peu comme clang_complete, mais beaucoup plus rapide et avec des correspondances floues.

en plus de ce qui précède, YCM fournit également l'achèvement sémantique pour C#, Python, Go, TypeScript, etc. Il fournit également une complétion Non sémantique, basée sur des identificateurs pour les langues pour lesquelles il n'a pas de support sémantique.

161
répondu Valloric 2015-09-18 01:49:02

il y a aussi clang_complete qui utilise le clang compilateur pour fournir l'achèvement de code pour les projets c++. Il ya une autre question avec conseils de dépannage pour ce plugin.

le plugin semble fonctionner assez bien tant que le projet compile, mais est d'une lenteur prohibitive pour les grands projets (puisqu'il tente une compilation complète pour générer liste des balises).

35
répondu Konrad Rudolph 2017-05-23 12:26:42

comme demandé, voici le commentaire que j'ai donné plus tôt:

Regardez ceci:

ce lien devrait vous aider si vous voulez utiliser monodevelop sur un MacOSX

bonne chance et codage heureux.

7
répondu Ric Tokyo 2009-07-13 01:45:40

je viens de trouver le projet Eclim lié dans une autre question . Cela semble très prometteur, du moins pour L'intégration Java.

5
répondu Konrad Rudolph 2017-05-23 11:33:26

je suis un peu en retard à la fête mais autocomplpop pourrait être utile.

3
répondu romainl 2011-04-21 12:36:50

est ce que vous cherchez quelque chose comme intellisense?

insevim semble répondre à la question.

lien vers les captures d'écran ici

2
répondu Ric Tokyo 2009-07-12 11:50:54

Quelqu'un a-t-il mentionné code_complete?

Mais vous n'avez pas aimé ctags, donc ce n'est probablement pas ce que vous cherchez...

1
répondu Johan 2011-04-21 13:02:47