En un mot, je recherche une fonctionnalité de saisie semi-automatique fonctionnelle pour l'éditeur Vim. J'ai déjà soutenu que Vim remplace complètement un IDE sous Linux et bien que cela soit certainement vrai, il manque une caractéristique importante: la saisie semi-automatique.
Je connais Ctrl+ N, l' intégration Exuberant Ctags , Taglist , cppcomplete et OmniCppComplete . Hélas, rien de tout cela ne correspond à ma description de "la saisie semi-automatique de travail:"
- Ctrl+N fonctionne bien (uniquement) si vous avez oublié comment épeler
class
, ouwhile
. Tant pis. - Ctags vous donne les rudiments mais a beaucoup d'inconvénients.
- Taglist est juste un wrapper Ctags et en tant que tel, hérite de la plupart de ses inconvénients (bien qu'il fonctionne bien pour lister les déclarations).
- cppcomplete ne fonctionne tout simplement pas comme promis, et je ne peux pas comprendre ce que j'ai fait de mal, ou s'il «fonctionne» correctement et que les limitations sont de par leur conception.
- OmniCppComplete semble avoir les mêmes problèmes que cppcomplete, c'est-à-dire que l'auto-complétion ne fonctionne pas correctement. De plus, le
tags
fichier doit à nouveau être mis à jour manuellement.
Je suis conscient du fait que même les IDE modernes ne proposent pas une bonne complétion de 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 et est en fait requis pour une utilisation productive. Je cherche donc quelque chose qui puisse accomplir au moins les choses suivantes.
Connaissance de la syntaxe . cppcomplete promesses (mais ne tient pas pour moi), auto-complétion correcte et consciente de la portée des éléments suivants:
variableName.abc variableName->abc typeName::abc
Et vraiment, tout le reste est complètement inutile.
Configurabilité . J'ai besoin de spécifier (facilement) où se trouvent les fichiers source, et donc d'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 d'inclusion requis. Eclipse peut interpréter les informations qui s'y trouvent, pourquoi pas un script Vim également?
Actualité . Dès que je change quelque chose dans mon fichier, je veux que l'auto-complétion reflète cela. Je ne pas envie de déclencher manuellement
ctags
(ou quelque chose de comparable). En outre, les changements devraient être supplémentaires , à savoir quand j'ai changé un seul fichier , il est tout à fait inacceptable pourctags
la re-analyser l'arborescence du répertoire entier (qui peut ê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 veux pas programmer une solution à partir de zéro, et je ne suis pas bon pour déboguer les scripts Vim.
Une dernière note, j'aimerais vraiment quelque chose de similaire pour Java et C #, mais je suppose que c'est trop à espérer: ctags
seuls les fichiers de code analysent et Java et C # ont d'énormes cadres précompilés qui devraient être indexés. Malheureusement, développer .NET sans IDE est encore plus un PITA que C ++.
clang_complete
est techniquement le plus sonore mais excessivement lent en raison du manque de mise en cache des résultats et de la compilation partielle. Je dois admettre que je n'ai pas essayé toutes les réponses car certaines nécessitent une configuration compliquée et longue. Je retiendrai mon souffle pour un plugin utilisable maintenant que clang permet enfin aux développeurs de construire des AST à partir de sources C ++ (jusqu'à présent, il n'y avait pas de bons analyseurs gratuits pour C ++ disponibles).
clang_complete
récemment? Il peut être utilisé libclang
avec la mise en cache maintenant et devrait donc être plus rapide.
formatted like this
.)
sh
(ce qui signifie que c'est dans ma bibliothèque) et sont suivis de l'abréviation de ma classe. Par exempleshP
pour laParser
classe. Ensuite, tout ce que vous devez faire est d'écrireshP
et d'appuyer sur CTRL + p (ou CTRL + n si vous voulez) et d'obtenir les membres de la classe de la dernière utilisation à la première (ou du premier à la dernière si CTRL + n)