TP d'Ada avec VIM

De Ensiwiki
Aller à : navigation, rechercher

A l'attention des 1A : votre VIM est déjà pleinement configuré pour être productif en Ada ! Remercions cathcass qui a accepté d'utiliser nos fichiers de configuration ! La seule partie intéressante pour vous est donc la catégorie "Avantages" !

Avantages

Création de code

Complétion

ADA01.png

Omnicompletion

ADA03.png

Contrairement à Emacs, vim est capable de faire de la complétion sur les fonctions / procédures mais aussi sur les variables et les packages en Ada ! Il indique également le lieu de déclaration de la variable. Un CTRL+Clic sur la variable vous aménera au lieu de sa déclaration !

Indentation

ADA02.png

(Vim indente directement le code : ici on a juste appuyé sur Entrée et Vim nous place une tabulation à droite. De même, inutile de faire un backspace pour revenir au niveau du if : lorsque vous tapez "else" ou "end if", Vim le positionne directement au bon endroit.)

Compilation

Vim est capable de travailler en coordination avec Gnat. Lors d'une compilation ratée il vous indique la raison et vous place directement sur la ligne fautive. Pour aller d'erreur en erreur, tapez :cn (erreur suivante) et :cp (erreur précédente). :clist vous indique la liste de toutes les erreurs.

Fichier:ADACOMPIL.png

Pour gagner du temps et éviter d'avoir à taper les lignes de compilation à chaque fois, rajoutez ces lignes à votre .vimrc :

nmap <F5> :!adamake %:p:r<Return>
nmap <F6> :!%:p:r<Return>

Explication : en ligne de commande Vim, % est votre fichier courant. %:p son chemin absolu (/home/users1/login/toto.adb par exemple) et %:r son nom privé de l'extension. On exécute donc "$ adamake /home/users1/login/toto" puis "/home/users1/login/toto", autrement dit on compile votre fichier et on l'exécute. Formidable, non ?


Installation

Ada Bundle

  • Ada Bundle : Bundle complet pour rendre Vim Ada-friendly.

N.B. : Comme sur la plupart des tuto UNIX, "$" représente le prompt du shell. Il ne faut bien sûr pas retaper ce caractère.

$ vim ada.vba
:so %
:q

Le plugin est dézippé et installé automatiquement. Ajoutez ces lignes à votre .vimrc pour l'activer :

let g:ada_standard_types=1  " Colorie les types Ada.
let g:ada_line_errors=1  " Affiche les lignes trop longues
let g:ada_folding='g'  " Si vous voulez réduire les fonctions.

Tapez :h ada dans vim pour en savoir plus sur ce plugin et sur les options disponibles.

Ctags & Création des tags

  • Ctags et son extension Ada : pour avoir de l'omni-complétion (= complétion intelligente), VIM utilise Ctags. Il vous faut le ctags et son patch Ada.

Si vous êtes sur telesun, il y a de grandes chances pour que le ctags avec le plugin ada soit déjà installé ; vous n'avez donc pas à faire cette longue manip. /!\ Lorsque vous tapez "ctags" dans votre shell, ce n'est pas "exuberant ctags" qui est lancé mais le programme de tags d'emacs ! Encore un coup d'un vil prof fan de cet éditeur ! (Normalement le programme de tags d'Emacs s'appelle etags.)

[TODO : Préciser le PATH du vrai ctags]


Compilation et installation

Au moment où je vous parle, il faut télécharger "ctags-5.7.tar.gz" et "ctags-ada-mode-4.3.11.tar.bz2". Installez ensuite ctags comme suit :

$ tar -xzvf ctags-5.7.tar.gz
$ tar -xjvf ctags-ada-mode-4.3.11.tar.bz2
$ cd ctags-ada-mode-4.3.11
$ cp ada.c ../ctags-5.7
$ cp add_ada.vim ../ctags-5.7
$ cd ../ctags-5.7
$ ./configure --prefix=$HOME/la-ou-vous-voulez-installer-ctags/
$ vim add_ada.vim -c ":so %" -c ":q"

Explication : Vous avez détarré ctags et son patch. Vous avez ensuite copié les fichiers du patch dans le répertoire de ctags et vous avez appliqué le patch avec vim. (On effectue le configure avant l'application du patch car le patch modifie le Makefile...)

$ make
$ make install

Voilà, ctags est installé dans $HOME/la-ou-vous-voulez-installer-ctags/ . Vous pouvez maintenant supprimer les répertoires ctags-5.7 et ctags-ada-mode-4.3.11 et supprimer les tar.

Configuration de vim et débug

Pour dire à vim d'utiliser votre ctags et pas celui des profs, suivez ces instructions :

$ vim ~/.vim/autoload/ada.vim
Modifiez la ligne 431 "execute '!ctags '.l:Filename" en "execute '!$HOME/la-ou-vous-voulez-installer-ctags/bin/ctags '.l:Filename" ; de cette façon vous utiliserez votre ctags.
Modifiez les lignes 425, 426, 427 : ajoutez un / devant *.ada, *.adb et *.ads (sinon le chemin indiqué n'est pas bon).

Ajoutez ces lignes à votre .vimrc pour pouvoir générer les tags d'un fichier en un appui sur "F4" :

nmap <F4> :call ada#Create_Tags('dir')<CR>

N.B. : Il existe des plugins qui permettent de regénérer la liste des tags à chaque enregistrement. Cf. Article principal.

Une fois les tags créés, vous pouvez utiliser <C-x><C-o> (ou plus simplement <C-Space> avec le .vimrc pour débutant) pour compléter vos fonctions. Vous pouvez également faire un <C-Clic> sur une fonction pour être amené à sa définition.

Alternative à ctags

Si vous lisez l'aide d'AdaBundle, vous verrez qu'il est possible d'utiliser gnatxref pour générer les tags. Je déconseille fortement cette solution : elle vous oblige à modifier les options de compilation (rajouter un -a0, ...) et ne fonctionne que si les fichiers compilent. De plus gnatxref est assez lent, comparé à ctags.