web-dev-qa-db-fra.com

Complétion automatique dans Vim

En résumé, je recherche une fonctionnalité de complétion automatique active pour l'éditeur Vim. J'ai argumenté auparavant que Vim remplace complètement un IDE sous Linux et bien que ce soit certainement vrai, il lui manque une caractéristique importante: l'auto-complétion.

Je sais à propos de Ctrl+N, Intégration des Ctags exubérants , Taglist , cppcomplete et OmniCppComplete . Hélas, rien de tout cela ne correspond à ma description de "l'auto-complétion fonctionnelle":

  • Ctrl+N fonctionne bien (seulement) si vous avez oublié comment épeler class ou while. Tant pis.
  • Ctags vous donne les rudiments mais présente de nombreux inconvénients.
  • La liste de balises est juste un wrapper Ctags et, en tant que tel, hérite de la plupart de ses inconvénients (bien que cela fonctionne bien pour listing 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 cela “fonctionne” correctement et que les limitations s'appliquent. intentionnellement.
  • OmniCppComplete semble avoir les mêmes problèmes que cppcomplete, c'est-à-dire que l'auto-complétion ne fonctionne pas correctement. En outre, le fichier tags doit à nouveau être mis à jour manuellement.

Je suis conscient du fait que même les IDE les plus modernes et les plus complets n'offrent pas une bonne complétion du code C++. C'est pourquoi j'ai accepté le manque de Vim dans ce domaine jusqu'à présent. Mais je pense qu'un niveau fondamental de complétion de code n'est pas trop demander, mais est en fait nécessaire pour une utilisation productive. Je cherche donc quelque chose qui puisse accomplir au moins les choses suivantes.

  • Sensibilisation à la syntaxe . cppcomplete promet (mais ne donne pas pour moi), l'auto-complétion correcte, conforme à la portée, de ce qui suit:

    variableName.abc
    variableName->abc
    typeName::abc
    

    Et vraiment, toute autre chose est complètement inutile.

  • Configurabilité . Je dois spécifier (facilement) où se trouvent les fichiers source, et donc où le script obtient ses informations d'auto-complétion. En fait, mon répertoire contient un Makefile qui spécifie les chemins d’inclusion requis. Eclipse peut interpréter les informations qu’il contient. Pourquoi pas un script Vim?

  • Actualité . Dès que je change quelque chose dans mon fichier, je veux que l'auto-complétion reflète cela. Je fais pas je veux déclencher manuellement ctags (ou quelque chose de comparable). En outre, les modifications doivent être incrémental, c’est-à-dire que si je n’ai modifié qu’un seul fichier, c’est complètement inacceptable pour ctags pour ré-analyser l’arborescence complète être énorme).

Ai-je oublié quelque chose? N'hésitez pas à mettre à jour.

Je suis à l'aise avec beaucoup de configuration et/ou de bricolage, mais je ne souhaite pas programmer une solution à partir de zéro, et je ne suis pas doué pour le débogage de scripts Vim.

Une dernière remarque, je voudrais vraiment quelque chose de similaire pour Java et C #, mais je suppose que c’est trop espérer: ctags n’analyse que les fichiers de code et Java et C # possède d’énormes frameworks précompilés qui devraient être indexés. Malheureusement, développer .NET sans IDE est encore plus un PITA que C++.

244
Konrad Rudolph

Essayez YouCompleteMe . Il utilise Clang via l'interface libclang, offrant une complétude sémantique C/C++/Objective-C. C'est un peu comme clang_complete, mais nettement plus rapide et avec une correspondance floue.

En plus de ce qui précède, YCM fournit également une complétion sémantique pour C #, Python, Go, TypeScript, etc. Il fournit également une complétion non sémantique basée sur l'identifiant pour les langages pour lesquels il ne prend pas en charge la prise en charge sémantique.

162
Valloric

Il existe également clang_complete qui utilise le compilateur clang pour fournir la complétion de code aux projets C++. Il y a une autre question avec conseils de dépannage pour ce plugin.

Le plugin semble fonctionner assez bien tant que le projet est compilé, mais il est excessivement lent pour les grands projets (puisqu'il tente une compilation complète pour générer la liste de balises).

35
Konrad Rudolph

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 bon codage.

7
Ric Tokyo

Je viens de trouver le projet Eclim lié à autre question . Cela semble assez prometteur, du moins pour l’intégration Java.

5
Konrad Rudolph

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

3
romainl

est ce que vous cherchez quelque chose comme intellisense?

insevim semble résoudre le problème.

lien vers les captures d'écran ici

2
Ric Tokyo

Est-ce que quelqu'un a mentionné code_complete?

Mais vous n'avez pas aimé les balises, alors ce n'est probablement pas ce que vous recherchez ...

1
Johan