Aller au contenu

Extension Extraits

Tapez un court préfixe, appuyez sur ++tab++, et il se développe en une construction complète — une boucle for, un squelette de classe, un tableau Markdown — avec le curseur prêt sur le premier champ à remplir. Tab/Shift+Tab font défiler les champs, Esc termine. L'extension fournit aussi Fichier ▸ Nouveau depuis un modèle… pour créer des fichiers entiers.

Développer un extrait

  1. Tapez le préfixe d'un extrait (disons for dans un fichier C++).
  2. Appuyez sur ++tab++. Le préfixe est remplacé par le corps de l'extrait — en une seule étape d'annulation — et le premier champ est sélectionné, prêt à être écrasé.
  3. Appuyez sur ++tab++ pour passer au champ suivant, ++shift+tab++ pour revenir en arrière.
  4. Après le dernier champ, ++tab++ place le curseur à la position finale de l'extrait. ++esc++ met fin à la session à tout moment, en laissant le texte tel que tapé.

Si le mot devant le curseur n'est pas un préfixe d'extrait, ++tab++ indente comme d'habitude — la touche n'est empruntée que lorsqu'il y a quelque chose à développer. Tant que la fenêtre de complétion est ouverte, ++tab++ appartient à cette fenêtre.

Un développement multiligne hérite de l'indentation de la ligne où vous l'avez tapé, et ses fins de ligne suivent la convention du document (CRLF/LF).

Les extraits dans la fenêtre de complétion

Les préfixes d'extraits apparaissent aussi dans la fenêtre de complétion automatique, marqués d'un petit glyphe pour se distinguer des mots ordinaires. Accepter un élément extrait le développe immédiatement et démarre la session de champs — comme si vous aviez tapé le préfixe puis appuyé sur ++tab++.

Ce qu'un extrait peut contenir

Jeton Signification
$1$9 Champs tabulés, visités dans l'ordre numérique (indépendamment de leur position dans le corps).
${1:default} Un champ avec contenu initial, sélectionné à la visite.
$0 Là où finit le curseur après le dernier champ (par défaut la fin de l'extrait).
$FILENAME Le nom de fichier du document (vide pour les tampons non enregistrés).
$DATE La date du jour, au format ISO (2026-07-06).
$SELECTION Le texte sélectionné au déclenchement de l'extrait.
$CLIPBOARD Le texte courant du presse-papiers.
\$ Un signe dollar littéral.

Tout élément mal formé est inséré littéralement plutôt que d'échouer. Un indice de champ répété dans le corps ne conserve que sa première occurrence comme champ actif.

Gérer les extraits

Préférences ▸ Extraits liste tous les extraits — les jeux fournis et les vôtres. De là, vous pouvez :

  • Ajouter… un nouvel extrait : préfixe, portée (identifiants de langage séparés par des virgules comme cpp, c ; vide ou * s'applique partout), description, et le corps.
  • Modifier… vos extraits. Modifier un extrait fourni crée votre propre copie, qui prend le pas sur l'extrait fourni (même préfixe et même portée).
  • Supprimer vos extraits (les extraits fournis ne peuvent pas être supprimés — masquez-les plutôt).

Des jeux fournis existent pour C/C++, Python, JavaScript/TypeScript et Markdown, plus deux aides universelles (date, clip). Vos extraits sont stockés en JSON dans le répertoire de données de l'extension (snippets/user.json) ; vous pouvez aussi y déposer des fichiers *.json supplémentaires — le format correspond aux fichiers fournis :

{
    "language": ["cpp", "c"],
    "snippets": [
        {
            "prefix": "for",
            "description": "indexed for loop",
            "body": ["for (${1:int i = 0}; ${2:i < count}; ${3:++i})", "{", "\t$0", "}"]
        }
    ]
}

Les corps sont des tableaux de lignes. Un tableau "scopes" par extrait remplace le défaut "language" du fichier.

Modèles de fichiers

Fichier ▸ Nouveau depuis un modèle… ouvre un sélecteur de squelettes de fichiers — une source C++ avec main, un en-tête avec garde d'inclusion, un script Python, un document Markdown, une page HTML. Le modèle choisi s'ouvre comme nouveau document non enregistré, ses variables ($DATE, $CLIPBOARD, …) déjà substituées ; les jetons de champ se réduisent à leur texte par défaut.

Les modèles sont aussi des fichiers JSON (templates/*.json, fournis comme dans le répertoire de données de l'extension) :

{
    "templates": [
        {
            "name": "Python script",
            "suggestedName": "script.py",
            "body": ["#!/usr/bin/env python3", "", ""]
        }
    ]
}

Limitations

  • Un indice de champ répété n'est pas mis en miroir (taper dans le champ 1 ne met pas à jour un second $1) ; les occurrences suivantes sont du texte brut.
  • Les espaces réservés imbriqués (${1:${2:x}}) ne sont pas pris en charge ; le texte intérieur est pris littéralement.
  • $FILENAME est vide dans les tampons non enregistrés.