Gérer ses templates pour Vim sans fichiers externes

Suite à un billet posté sur le site Informatique et liberté évoquant une solution originale pour gérer ses templates avec Vim, j’ai décidé d’améliorer un peu la technique en utilisant la puissance de ce superbe éditeur combinée à celle de sed.

Habituellement, pour chaque template, nous créons un fichier externe placé dans notre dossier personnel ~/.vim. Prenons l’exemple d’un template HTML dans ~/.vim/templates/html que l’on appellerait de cette manière dans notre fichier de configuration ~/.vimrc :

autocmd BufNewFile *.html 0r ~/.vim/templates/html

Logiciels utilisés :

  • Vim 7.2
  • GNU Sed 4.2

Le but du jeu est de centraliser toute notre configuration dans notre ~/.vimrc et donc d’y inclure nos templates. Le seul moyen, à ma connaissance, est de mettre ceux-ci en commentaires afin qu’ils n’interfèrent pas avec le reste de la configuration, il ne restera plus alors qu’à trouver le template adéquat, pour cela on passera par des marqueurs de début et de fin de template, voici donc ma solution :

" BEGIN HTML
" <html>
"     <head>
"         <title>Hello gnusquad !</title>
"     </head>
" </html>
" END HTML

autocmd BufNewFile *.html call Template('HTML')

function! Template(type)
    exe "0r !sed -n '/^"\s*BEGIN " . a:type . "$/,/^"\s*END " . a:type . "$/ {s///;/^$/d;s/^" //;p}' $MYVIMRC"
    echo '--> INFO : Template ' . a:type . ' charge < --'
endfunction

Nous retrouvons donc en première partie le template mis en commentaire et délimité par les marqueurs « BEGIN HTML » et « END HTML », la deuxième partie appelle la fonction « Template » avec en paramètre « HTML » lorsque l'on crée un nouveau fichier ayant son nom correspondant au motif « *.html », la troisième et dernière partie contient la fonction « Template » proprement dite qui prend donc un paramètre servant à délimiter le template, on y trouve une jolie ligne de sed qui paraît obscure à première vue mais qui est très simple : on localise et ne traite que la partie contenue entre « BEGIN xxx » et « END xxx », on supprime ces deux lignes puis les lignes vides puis on décommente le template, le tout étant inséré dans le buffer courant. :)

Vous aurez donc compris qu'il est très simple d'ajouter de nouveaux templates : il suffit juste que le paramètre passé à la fonction « Template » corresponde à la partie présente après « BEGIN » et « END » de votre template. ;)

Vus : 845
Publié par Sylvain : 20