Aller au contenu

Mise en évidence de la balise / du bloc correspondant

Quand le curseur est sur — ou à l'intérieur de — une balise ou un bloc englobant, l'éditeur encadre le début et la fin de cette paire, si bien que vous voyez d'un coup d'œil où commence et où finit un <div>…</div>, un if…fi ou un #if…#endif.

C'est distinct de la correspondance d'accolades à caractère unique (le glyphe () [] {}) : celle-ci continue de fonctionner exactement comme avant, de son côté. Les deux peuvent s'afficher en même temps ; vous pouvez donc être dans un bloc { } et dans un if…fi englobant et voir les deux.

Utilisation

Placez le curseur sur un nom de balise (ou n'importe où dans <…>), ou sur un mot-clé de bloc — l'ouverture, la fermeture et les éventuels mots-clés « intermédiaires » s'illuminent ensemble. Placer le curseur à l'intérieur d'un bloc (pas sur un mot-clé) met en évidence la paire englobante la plus proche. Le simple contenu entre balises ne surligne rien.

La mise en évidence se met à jour au fil des déplacements du curseur et ne nécessite aucun raccourci.

Activer et désactiver

Affichage ▸ Surligner la balise/le bloc correspondant — activé par défaut, et le choix est mémorisé entre les sessions.

Les deux types de paires

Balises (balisage)

En HTML et en XML, le curseur sur une balise ouvrante ou fermante encadre le nom de l'élément dans les deux balises. L'imbrication de balises de même nom est résolue par profondeur, les balises auto-fermantes (<br/>) n'ont pas de partenaire, et un > dans une valeur d'attribut entre guillemets ne termine jamais la balise prématurément. Un < utilisé comme texte ou opérateur de comparaison ne déclenche jamais la mise en évidence — la correspondance s'appuie sur le style balise du lexer, pas sur les chevrons bruts.

Mots-clés de bloc (langages)

Des paires de mots-clés entiers, comptées avec une imbrication correcte et en ignorant tout ce qui se trouve dans les commentaires et les chaînes. Fournies d'origine :

Langage Paires
Shell (bash) if … fi (avec elif/else), do … done, case … esac
C / C++ préprocesseur #if / #ifdef / #ifndef#endif (avec #elif/#else)
SQL begin … end, case … end (insensible à la casse)

En C/C++, uniquement pour le préprocesseur

Les blocs { } ordinaires du C/C++ sont gérés par la correspondance d'accolades à caractère unique, pas par cette fonctionnalité — un .cpp sans conditionnelles #if…#endif n'affiche donc rien ici, c'est voulu.

Ajouter des paires pour un autre langage

Les paires sont des données, pas du code : elles vivent dans le JSON du colorizer du langage, vous pouvez donc en ajouter pour n'importe quel langage sans recompilation. Dans le fichier colorizer, ajoutez "tagMatch": true pour le balisage, ou une liste "blockPairs" pour les paires de mots-clés, p. ex. :

"blockPairs": [
    { "open": "if", "middle": ["elif", "else"], "close": "fi" },
    { "open": "do", "close": "done" }
],
"pairsCaseSensitive": false

Un fichier colorizer utilisateur masque celui livré : vous pouvez donc remplacer ou étendre les paires intégrées. Voir Coloration syntaxique pour l'emplacement des fichiers colorizer.

Notes et limites

  • La correspondance analyse une fenêtre autour du curseur ; une paire dont les extrémités sont très éloignées (environ mille lignes ou plus — p. ex. une garde d'inclusion couvrant tout le fichier) peut ne pas être détectée.
  • La correspondance applique une imbrication stricte : une seule balise ou un seul bloc intérieur non fermé empêche les balises/blocs qui l'entourent de correspondre tant qu'il n'est pas fermé.

Voir aussi