Auto-fermeture et indentation intelligente¶
Pendant la frappe, l'éditeur ferme les parenthèses et les guillemets pour vous, conserve votre indentation sur les nouvelles lignes, ouvre les blocs entre accolades, et applique une unité d'indentation cohérente (tabulations ou espaces) à la touche Tab, à la désindentation par Backspace comme à l'indentation automatique. Tout ce qui est décrit ici est une fonctionnalité intégrée de l'éditeur ; les commandes de menu correspondantes et le réglage du style d'indentation viennent de l'extension Indentation fournie.
Le mécanisme est conçu pour être invisible — il n'agit que sur le caractère que vous venez de taper, et s'efface partout où il gênerait (dans les commentaires et les chaînes, devant des mots existants, avec le mauvais caractère partenaire).
Auto-fermeture des parenthèses et des guillemets¶
Taper une parenthèse ou un guillemet ouvrant insère son partenaire et laisse le curseur entre les deux :
| Vous tapez | Vous obtenez | Curseur |
|---|---|---|
( |
() |
entre les deux |
[ |
[] |
entre les deux |
{ |
{} |
entre les deux |
" |
"" |
entre les deux |
' |
'' |
entre les deux |
Quelques règles évitent que cela devienne agaçant :
- Frappe traversante. Taper un caractère fermant quand le même caractère
se trouve déjà à droite du curseur le franchit au lieu d'en insérer un second —
taper d'une traite à travers
()ou""laisse donc une seule paire équilibrée. - Pas de fermeture devant un mot. Un ouvrant n'est complété que si le
caractère suivant est un blanc, un fermant ou la fin de ligne — ajouter
(juste avant du texte existant n'injecte donc pas un)parasite en plein milieu. - Guillemets sensibles à l'apostrophe. Un
'tapé juste après une lettre (comme dansdon't) est traité comme une apostrophe et n'est pas apparié. Les guillemets ne s'auto-ferment que dans un contexte neutre (début de jeton, après un blanc ou un opérateur). - Chevrons uniquement dans le balisage.
<…>ne s'auto-ferment que dans les documents HTML/XML, où<ouvre une balise. Partout ailleurs<est un opérateur de comparaison ou de décalage et il est laissé tel quel.
Entourer une sélection (taper pour entourer)¶
Avec du texte sélectionné, taper un ouvrant ne remplace pas la sélection — il l'entoure :
- Fonctionne avec
([{"'(pas<— hors balisage c'est un opérateur). - Le texte intérieur reste sélectionné ensuite, ce qui permet d'enchaîner :
tapez
(puis"et vous obtenez("value"). - Avec plusieurs curseurs, chaque sélection est entourée indépendamment — et toute l'opération est une seule étape d'annulation.
Supprimer une paire¶
Appuyer sur Backspace avec le curseur entre une paire auto-insérée vide
((|), [|], {|}, "|", '|', ou <|> en balisage) supprime les deux
caractères en une fois : vous annulez donc une auto-fermeture d'une seule touche.
Dès qu'il y a du contenu entre la paire, Backspace se comporte normalement.
Indentation intelligente sur Enter¶
Appuyer sur Enter reporte les blancs de tête de la ligne courante sur la nouvelle ligne, si bien que vous restez à la même profondeur sans retaper de tabulations ou d'espaces :
- Conserver l'indentation. La nouvelle ligne commence avec la même indentation que la ligne quittée.
- Ouvrir un niveau. Si la ligne quittée se termine par un ouvrant (
{,[,(), la nouvelle ligne est indentée d'un niveau supplémentaire. - Ouvrir un bloc. Si le curseur se trouve entre un ouvrant et son fermant correspondant, le bloc se déploie : la nouvelle ligne est indentée d'un niveau de plus et le fermant descend sur sa propre ligne, à la profondeur de l'ouvrant.
Style d'indentation — tabulations, espaces ou auto¶
Une seule unité d'indentation pilote la touche Tab, la désindentation par Backspace et l'indentation automatique ci-dessus, si bien qu'elles restent toujours cohérentes. Choisissez-la dans Préférences ▸ Extensions ▸ Indentation :
| Style | Comportement |
|---|---|
| Tabulations (défaut pour les nouveaux fichiers) | Un niveau est un vrai caractère de tabulation ; Espaces par indentation règle sa largeur visuelle. |
| Espaces | Un niveau vaut Espaces par indentation caractères d'espace. |
| Auto (détecter depuis le document) | L'éditeur analyse l'indentation existante du document et la suit — un fichier indenté avec des tabulations continue avec des tabulations, un fichier à 2 espaces continue avec deux espaces. Un fichier sans indentation retombe sur le défaut (tabulations). |
Les nouveaux fichiers sans titre utilisent par défaut Tabulations, largeur 4.
Ajuster l'indentation à la main¶
L'extension Indentation ajoute deux commandes (aussi sous Édition ▸ Indentation) qui indentent ou désindentent chaque ligne touchée par la sélection — ou la ligne du curseur quand rien n'est sélectionné :
| Commande | Raccourci |
|---|---|
| Augmenter l'indentation | Ctrl+] |
| Diminuer l'indentation | Ctrl+[ |
Défauts par langage¶
Certains langages ont une convention d'indentation quasi universelle, et l'éditeur la livre comme défaut de ce langage — un fichier fraîchement ouvert de ce type s'indente correctement sans aucune configuration :
| Langage | Défaut |
|---|---|
| Python | 4 espaces (PEP 8) |
| Rust | 4 espaces (rustfmt) |
| Markdown | 4 espaces (listes imbriquées) |
| YAML | 2 espaces (les tabulations sont interdites) |
| JSON | 2 espaces |
| Go | tabulations (gofmt) |
| C / C++ | tabulations |
Tous les autres langages ne portent délibérément aucun défaut et suivent votre réglage global d'indentation. Changer à la main le langage d'un document (le menu Langue) ré-applique immédiatement le défaut correspondant.
Le défaut vit dans le fichier de définition du langage
(colorizers/<id>.json, clé "indent": { "style": "tabs|spaces", "width": N }).
Un utilisateur averti peut modifier un défaut livré en plaçant une copie éditée
de ce fichier dans le répertoire de substitution utilisateur — le catalogue
remplace les définitions par identifiant.
Prévu : substitutions par langage dans les Préférences
Un tableau de réglages pour remplacer ces défauts par langage (sans toucher au JSON) est conçu et planifié comme prochaine étape de cette fonctionnalité ; en attendant, la substitution JSON ci-dessus et les couches ci-dessous sont les moyens de piloter l'indentation.
D'où vient l'unité d'indentation (priorité)¶
Quand plusieurs sources ont un avis sur l'indentation, l'éditeur les arbitre en un seul endroit et applique le gagnant, priorité la plus haute d'abord :
- Le
.editorconfigdu projet — quand il est présent et que « Appliquer les paramètres .editorconfig » est activé, lesindent_style/indent_size/tab_widthdu projet l'emportent pour les fichiers correspondants. - Le défaut livré du langage — le tableau ci-dessus, quand le langage du document en déclare un.
- Votre réglage global d'indentation — le choix Tabulations / Espaces / Auto ci-dessus.
Ainsi un projet livré avec un .editorconfig l'emporte sur tout pour les
fichiers de ce projet ; un fichier Python hors d'un tel projet s'indente avec
les espaces PEP-8 même si votre réglage global est en tabulations ; et tout le
reste suit votre réglage global. Vous pouvez toujours changer l'indentation d'un
document à la main ensuite.
La priorité vaut dès que quelque chose change : appliquer un autre choix
Tabulations / Espaces / Auto dans les Préférences ré-arbitre immédiatement le
document ouvert, si bien qu'un fichier régi par un .editorconfig ou un défaut
de langage garde son indentation sans que vous ayez à changer d'onglet.
Multi-curseur¶
Tout ce qui précède s'applique à chaque curseur quand vous éditez avec
plusieurs curseurs : taper ( insère () à chacun, Enter
conserve l'indentation de chaque ligne, et Backspace entre des paires vides
supprime les deux caractères à chacun. Un seul Annuler défait toute la
modification multi-curseur en une étape.
Backspace avec des curseurs mixtes
Backspace ne supprime des paires que si chaque curseur se trouve entre une paire vide. Si certains curseurs sont ailleurs, Backspace reprend son comportement normal à tous, si bien qu'il ne supprime jamais un fermant isolé à un curseur pendant qu'il édite un mot à un autre.
Dans les commentaires et les chaînes¶
Quand un colorizer syntaxique est actif, l'auto-fermeture et l'ouverture de bloc
pilotée par les accolades s'effacent dans les commentaires et les littéraux de
chaîne/caractère — là, un { ou un " est du texte ordinaire, pas du code, et
l'éditeur le laisse exactement tel que tapé. L'indentation simple (report des
blancs de la ligne précédente) fonctionne toujours. Dans un document en texte
brut sans colorizer, il n'y a rien à inhiber : la fermeture se comporte partout
de la même façon.
Voir aussi¶
- Extension Indentation — le réglage du style d'indentation et les commandes Augmenter/Diminuer.
- EditorConfig — indentation par projet qui l'emporte sur votre réglage global.
- Édition multi-curseur — placer plusieurs curseurs et éditer avec eux.