Skip to content
Snippets Groups Projects
Commit e827b992 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Ajout de la courte introduction à YASnippet

parent a73e9e09
No related branches found
No related tags found
No related merge requests found
......@@ -708,13 +708,11 @@ la région, sinon, le curseur est positionné entre les accolades.
Enfin, si on préfixe les raccourcis précédents par ~C-u~ alors, le
style est remplacé par le style demandé. Par exemple, si on avait le
texte suivant
#+header: :exports code
#+BEGIN_SRC latex
#+BEGIN_SRC latex :exports code
\emph{Un texte}
#+END_SRC
si on utilise la commande ~C-u C-c C-f C-b~, il sera transformé en
#+header: :exports code
#+BEGIN_SRC latex
#+BEGIN_SRC latex :exports code
\textbf{Un texte}
#+END_SRC
......@@ -888,6 +886,79 @@ conseillé d'utiliser les raccourcis de navigation classiques :
| ~C-x left~ | Retourne au /buffer/ précédent |
| ~C-x right~ | Retourne au /buffer/ suivant |
*** YASnippet
Il n'est pas envisageable d'écrire un tutoriel Emacs sans évoquer les
~snippets~. Commençons donc par rappeler de quoi il s'agit. Les
~snippets~ (littéralement *fragments* en français) sont des patrons
(/template/) de code qui évitent de taper toujours et encore des
motifs de code qui se répètent. Emacs offre depuis très longtemps des
~snippets~ qui permettent souvent de n'écrire que les zones du code
faisant sens. ~YASnippet~ s'est imposé comme la version la plus
aboutie et est maintenant la plus utilisée.
Il faut bien intégrer le fait que les ~snippets~ ne sont pas des
morceaux de code simplement insérés mais de véritables modèles. Quand
on les utilise, Emacs invite l'utilisateur à renseigner certains
champs (en ligne) ce qui permet d'obtenir directement le code
correspondant au patron sans autre modification.
Notons également que ~YASnippet~ est livré avec une collection
impressionnante de modèles. Ces patrons sont accessibles selon le
contexte d'édition : les patrons utiles au ~Python~, à la rédaction
LaTeX ou au ~C++~, par exemple ne sont proposés que dans leur mode. Au
vu de leur nombre, il serait impensable d'en faire une quelconque
liste ici, mais on peut en avoir la liste dans le menu ~YASnippet~ ou
en tapant la commande ~M-x yas-describe-tables~ qui ouvre un buffer
contenant tous les ~snippets~ disponibles.
Un autre avantage de ~YASnippet~ est qu'il est très facile d'ajouter
de nouveaux modèles, mais nous ne décrivons pas la procédure ici (voir
[[http://joaotavora.github.io/yasnippet]] pour les détails).
| Raccourci | Description |
|-----------+---------------------|
| ~C-RET~ | Développe le modèle |
Dans cette configuration, on a désactivé le raccourci usuel +~TAB~+,
qui pouvait avoir des effets inattendus et désagréables, au profit de
~C RET~. En effet, l'effet principal de ~TAB~ est l'indentation du
code, mais si le /mini-mode/ de ~YASnippet~ interceptait un
développement de modèle possible, il prenait la main et remplaçait
l'indentation demandée par une expansion de modèle. Le nouveau
raccourci reste simple et n'interfère plus avec les fonctions
usuelles.
On termine cette courte introduction en donnant un exemple
d'utilisation en ~C++~. Si on écrit ~cls~ et si on utilise
immédiatement le raccourci ~C-RET~, le modèle (simple) de *classe* est
utilisé. On obtient alors
#+BEGIN_SRC c++ :exports code
class Name
{
public:
Name();
virtual ~Name();
};
#+END_SRC
Le curseur est alors positionné sur le premier ~Name~ qui est en fait
éditable. On est toujours en train d'appliquer le modèle et il suffit
maintenant (sans autre action) d'entrer le nom de la classe. Par
exemple, si on écrit ~Tableau~ (une seule fois), on obtient
#+BEGIN_SRC c++ :exports code
class Tableau
{
public:
Tableau();
virtual ~Tableau();
};
#+END_SRC
On n'a modifié qu'un champ pour obtenir ce résultat. ~TAB~ permet de
passer au champ suivant s'il y en a d'autres et ~S-TAB~ (ou ~backtab~)
permet de revenir à l'édition d'un champ précédent. Pour obtenir ce
résultat, on a simplement pressé la suite de touches suivantes.
#+BEGIN_EXAMPLE
c l s C-RET T a b l e a u
#+END_EXAMPLE
Cet exemple simple illustre bien l'efficacité de l'approche.
* Pour aller plus loin
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment