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 !
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 !).
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
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 » !
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/
Vim c’est pour les vrais geeks qui ont un cerveau remplaçant l’IDE 😛
Les IDEs, c’est pour les autres 😛
😀
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
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é !
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 !
Merci beaucoup pour cette astuce !
C’est vraiment pratique 🙂
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.
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.