Espace d'Asher256

Vim : comment avoir un Système de « Templates » pour programmeur HTML, PHP, C++, Python, etc. ?





Dans cet article, vous découvrirez comment faire en sorte que Vim ait un système de templates.

Les templates sont assez utiles pour gagner du temps. Une fois que vous aurez appliqué l’astuce de cet article, Vim remplira automatiquement vos nouveau fichiers (vierges donc) avec le contenu de votre choix !

Vim / gVim, éditeur texte, une icône

Les étapes pour avoir le système de templates avec Vim

Nous allons prendre pour exemple les fichiers HTML. Après les quelques manipulations ci-dessous, votre éditeur de texte Vim remplira les nouveaux fichiers HTML avec les premières balises.

Avertissement : les instructions ci-dessous ont été exécutées dans un système de type UNIX (GNU/Linux pour être précis). Sous Windows, il est possible de faire la même chose, mais certaines choses pourraient être différentes. Comme le chemin ~/.vimrc par exemple.

La première chose à faire est de créer le répertoire ~/.vim/templates :

mkdir -p ~/.vim/templates

Ensuite, créez le fichier ~/.vim/templates/xhtml.html pour y mettre ceci :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
  <head>
    <title>Titre de la page</title>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <meta http-equiv="Content-Language" content="fr" />
    <meta name="author" content="Prénom Nom" />
    <meta name="generator" content="vim" />
    <meta name="keywords" lang="fr" content="" />
    <meta name="description" content="la description de la page" />
   </head>
<body>
    <p>Contenu !</p>
</body>
</html>

Ajoutez cette ligne dans le fichier ~/.vimrc :

au bufNewFile *.html 0r ~/.vim/templates/xhtml.html

Enfin, fermez Vim, puis ouvrez un fichier html avec :

vim $HOME∕hello.html

Vous verrez que le fichier sera rempli avec ce qu’on a mis dans ~/.vim/templates/xhtml.html !

Comment avoir un système de templates Vim avec les autres langages de programmation, comme PHP ?

Un exemple vaut mieux qu’un long discours !

Si vous souhaitez avoir un système de templates pour le PHP, la procédure est similaire à ce qu’on a déjà fait plus haut pour le HTML. Il vous faudra seulement remplacer « *.html » par « *.php » et « ~/.vim/templates/xhtml.html » par  » « ~/.vim/templates/php.php » dans la commande que vous avez ajouté dans ~/.vimrc (n’oubliez pas aussi de créer le fichier php.php dans ~/.vim/templates/  pour y mettre le contenu de ce qui remplacera les futurs fichiers vierges ouverts !).





Déjà 11 commentaires dans “Vim : comment avoir un Système de « Templates » pour programmeur HTML, PHP, C++, Python, etc. ?”
  1. gil gam

    Bonjour

    en applicant le contneu de cet article sur une ubuntu intrepid dernier modèle (je cherche à me perfectionner dans vi) cela ne focntionne pas j’ai une erreur

    E319: Sorry, the command is not available in this version: au bufNewFile *.html 0r ~/.vim/templates/xhtml.html
    Press ENTER or type command to continue

    Un idée pour y remédier ?

    Merci

  2. Asher256

    Il faut utiliser « Vim » et pas « Vi » pour que cela fonctionne.

    sudo apt-get install vim

    et lance Vim avec la commande « vim » et pas « vi » !

  3. Edmeral

    je crois que utiliser un éditeur WYSIWYG ou un IDE sera mieux je comprends pas pourquoi utiliser Vim alors qui y en a des outils plus pratique à mon avis

    http://edmeral.12r.org/

  4. Asher256

    Vim c’est pour les vrais geeks qui ont un cerveau remplaçant l’IDE 😛

    Les IDEs, c’est pour les autres 😛

    😀

  5. yohann

    merci pour les explication c’est très clair.
    je rencontre cependant un probleme:
    un saut de ligne est inseré a la fin du fichier:

    exemple:
    ~/.vim/templates/php.php:

    1
    ~

    vim new.php
    1
    3
    ~

    Je pense que c’est la ligne d’insertion originale qui est conservée et ajoutée à la fin du template.
    Rencontre tu aussi ce probleme?
    Y a t il un moyen pour que la dernière ligne du template corresponde à la dernière ligne du nouveau fichier?

    d’avance merci

  6. Phil

    Merci pour ton article. Je ne voulais pas faire d’autres fichiers (je veux que mon vimrc se suffise à lui-même) alors j’ai pensé à l’astuce suivante que je partage ici et que je posterai sur mon blog dans la lancée de mes config vimrc !

     » TEMPLATE-HTML
     » TEMPLATE-HTML
     » TEMPLATE-HTML
     » TEMPLATE-HTML ______
     » TEMPLATE-HTML
     » TEMPLATE-HTML
     » TEMPLATE-HTML
     » TEMPLATE-HTML
     » TEMPLATE-HTML
     » TEMPLATE-HTML
     » TEMPLATE-HTML
     » TEMPLATE-HTML
     » TEMPLATE-HTML
     » TEMPLATE-HTML
     » TEMPLATE-HTML

    call system(« grep « ^..TEMPLATE-HTML » ~/.vimrc | sed ‘s/^ » TEMPLATE-HTML //’ > /tmp/template_vim.html »)
    autocmd bufNewFile *.html 0r /tmp/template_vim.html

    Sur le même principe, on peut bien-sûr enchaîner les templates, là, c’est une adaptation du tien.

    Merci encore pour ton article de qualité !

  7. Phil

    Le code HTML n’est pas passé mais tes lecteurs comprendront que chaque ligne commentée et commençant par TEMPLATE-HTML est un copié/collé de l’exemple que tu fournis dans ton billet et que je recherche avec un grep avant de nettoyer ces fameux caractères pour obtenir mon template. J’alimente ainsi un fichier temporaire qui est relayé à la commande VIM que tu m’as apprise.

    J’ai conscience que ce n’est pas forcément une technique très propre… Je suis ouvert aux commentaires !

  8. Philippe

    Merci beaucoup pour cette astuce !
    C’est vraiment pratique 🙂

  9. barmic

    Bonjour,

    J’ai pleins de petites choses à rajouter 🙂

    Pour Phil :
    Tu peut remplacer
    call system(« grep \ »^..TEMPLATE-HTML\ » ~/.vimrc | sed ‘s/^\ » TEMPLATE-HTML //’ > /tmp/template_vim.html »)
    par call system(« sed -n ‘s/^\ » TEMPLATE-HTML //p’ ~/.vimrc > /tmp/template_vim.html »)
    Comme ça la commande est plus simple.
    Ensuite tu peut faire directement appel à un programme externe avec la commande r donc tu peut faire ça :
    autocmd bufNewFile *.html 0r!sed -n ‘s/^\ » TEMPLATE-HTML //p’ ~/.vimrc

    Je pense qu’il est possible de faire plus simple encore en n’appelant pas sed (et rester en vim de bout à bout), mais je sais pas encore comment.

  10. barmic

    Ensuite (je le fais en deux commentaires pour me simplifier la vie) j’ai moi même mon propre moteur de template. L’interêt du mien c’est que les modèles sont dynamique. En effet il est possible de définir des champs qui seront remplis au moment voulu (par exemple la date ou le nom du fichier).

    Je rajoute une ligne dans mon .vimrc :
    au BufNewFile * silent! call LoadTemplate(‘%:t’, ‘%:e’)

    La fonction LoadTemplate est définie ainsi :
    function! LoadTemplate(name, extension)
    echohl Todo
    echo a:name
    echohl None
    let bou = expand(‘%:e’)
    silent! execute ‘0r ‘ . $HOME . ‘/.vim/template/’ . bou . ‘.tpl’
    silent! execute ‘source ‘ . $HOME . ‘/.vim/template/autocompletion.vim’
    endfunction

    Voici mon fichier autocompletion.vim :
    :%s//\=strftime(« %A %d %B %Y »)/ge
    :%s//\=expand(‘%:t’)/ge
    :%s//\=expand(‘%:t:r’)/ge
    let macro = substitute(expand(‘%:t’), ‘\.’, ‘_’, ‘g’)
    let macro = ‘__’ . toupper(macro) . ‘__’
    :%s//\=expand(macro)/ge

    let nom = system(« sed -n -e ‘s/^’$USER’:x:[0-9]*:[0-9]*:\([^,:]*\)[:,].*$/\1/p’ /etc/passwd »)
    :%s//\=nom\b/ge

    3match Todo //

    Et pour exemple le fichier h.tpl :
    #ifndef
    #define

    #endif //

    Il y a encore du boulot pour ne plus faire appel à des commandes externes (lors de la récupération du nom d’utilisateur). Mais c’est assez efficace.