Depuis un moment, je cherche à utiliser le programme ctags qui permet de scanner des sources et d’en extraire les information sur les classes, méthodes, constantes…. Le but est de l’utiliser pour la complétion dans vim:
Si je veux par exemple utiliser la fonction gtk_window_set_icon_from_file, je tape « gtk_win », puis je fais Ctrl+P et une liste de possibilité s’ouvre, il me sufit de choisir la bonne (avec Ctrl+N et Ctrl+P).
Mais pour ça, il faut avoir généré un fichier de tags qui répertorie cette fonction. Partout sur internet, vous trouverez la commande
ctags -R /dossier/des/sources/a/scanner/
Malheureusement, cette commande ne marchait pas en utilisant le dossier /usr/include. J’ai fini par comprendre pourquoi, je vous livre donc ma solution:
Par défaut, ctags n’analyse pas les prototypes de fonctions, seulement les définitions… Et évidemment, dans /usr/include il n’y a aucune définition. Il faut les lui demander en ajoutant l’option « –c-kinds=+p » (Ça veut dire: pour le langage C, utiliser en plus les Prototypes).
La commande ultime qui vous permet donc d’avoir la complétion pour toutes les fonctions des librairies qui se trouvent dans /usr/include est:
cd ~/.vim/tags
ctags --c-kinds=+p -R /usr/include
(Cela créera un fichier « tags », automatiquement utilisé par vim)
Je cherchais aussi un plugin que j’avais vu dans de nombreux screenshots qui permet d’afficher un panneau latéral qui permet de naviguer entre vos déclarations de classes, fonctions et autres, voir les prototypes, …
Ce plugin est téléchargeable ici: http://www.vim.org/scripts/script.php?script_id=483 (tout en bas)
Téléchargez-le simplement dans ~/.vim/plugin
Pour ouvir/fermer le pannel, utilisez la commande: « :TagExplorer ».
Autre possibilité, dans votre fichier /.vimrc, ajoutez: « nnoremap <silent> <F8> :TagExplorer<CR> » et vous pourrez l’ouvrir avec F8.
L’aide est intégrée: après avoir ouvert le pannel, « ? » affichera l’aide.
PS: en mode commande (CàD pas édition), pour changer de pannel, utilisez Ctrl+W puis une flèche.
Librement Vôtre,
David.