Bonne résolution, je me remets à coder. Arriverais-je à pondre quelque chose de sympa ? Bien sûr que je vous montrerai !
Partir de zéro est toujours difficile. Le fameux syndrome de la page l'écran blanc (ou terminal noir dans mon cas...). Commençons par choisir de bons outils (tout en restant relatif et non trollesque) : Vim pour saisir le code en C.
J'ai vite remarqué que mes headers (fichiers inclus au moyen de la directive #include) avaient tous la même forme de base que voici (ici pour le fichier time.h) :
#ifndef __TIME_H__
#define __TIME_H__
#endif
Vim propose un système de templates ou modèles. Lorsque vous créez un nouveau fichier, il peut ainsi être pré-remplit. Pour cela on utilise le système des autocommandes. Ajoutez cette ligne dans votre fichier .vimrc
au BufNewFile *.h 0r~/.vim/templates/h.h
au est l'abbréviation d'autocmd. On définit ici une commande à exécuter automatiquement lorsque l'événement BufNewFile se produit pour un fichier dont le nom correspondant au motif *.h. Ici, la commande 0r~/.vim/templates/h.h place le curseur au début de la ligne (0) puis lit et copie (r) le fichier ~/.vim/templates/h.h. C'est donc dans ce fichier sobrement nommé h.h (appelez-le comme vous voulez, mais gardez quand même l'extension pour la coloration syntaxique) que l'on va inscrire notre squelette.
Cependant nous n'avons ici qu'un contenu statique, c'est-à-dire que le fichier template est copié dans le nouveau fichier et c'est tout. Or, on aimerait bien, dans le cas des fichiers headers (et c'est d'ailleurs indispensable), pouvoir utiliser le nom du fichier pour nommer la constante qui nous sert à limiter à une l'inclusion dudit fichier. En gros, je voudrais, lorsque je crée toto.h, avoir automatiquement la constante __TOTO_H__ dans mon fichier.
Voici donc le fichier modèle h.h
#ifndef pipo
#define pipo
#endif
On y inscrit un mot quelconque à l'endroit où devra se trouver le nom définitif de la constante. Puis, on complète l'autocommande :
au BufNewFile *.h 0r~/.vim/templates/h.h|exe "%s/pipo/__".substitute(toupper(expand("%")),'\.',"_","")."__/"
Ne partez pas tout de suite, je vous explique !
Le pipe | permet d'enchainer plusieurs commandes. Après avoir recopié le contenu du modèle nous exécutons la commande ci-dessus (tout ce qu'il y a après exe). Cette commande est constituée d'une substitution sur tout le fichier (%s/ancien motif/nouveau motif/). Nous remplaçons donc pipo par une chaîne commençant et finissant par __. Au milieu sera inscrit le résultat des appels imbriqués de trois fonctions.
% représente le nom du nouveau fichier.
expand("%") est nécessaire pour lire le contenu de la variable %.
toupper(str) convertit la chaîne str en majuscules.
substitute(str, motif, new, flag) remplace motif par new dans la chaîne str. Ici, on remplace le point (attention, le point est un caractère spécial, il faut le déspécialiser avec '\.') par un underscore.
Ceci devrait vous permettre de faire vos propres modèles interactifs !