Pular para conteúdo

Realce de tag / bloco correspondente

Quando o cursor está sobre — ou dentro de — uma tag ou um bloco que o envolve, o editor emoldura o início e o fim desse par, para que você veja num relance onde começa e termina um <div>…</div>, um if…fi ou um #if…#endif.

Isso é separado da correspondência de chave de um único caractere (o glifo () [] {}): aquela continua funcionando exatamente como antes, por conta própria. As duas podem aparecer ao mesmo tempo, então você pode estar dentro de um bloco { } e de um if…fi que o envolve e ver as duas.

Como usar

Coloque o cursor sobre o nome de uma tag (ou em qualquer ponto dentro de <…>), ou sobre uma palavra-chave de bloco — a abertura, o fechamento e quaisquer palavras-chave "do meio" se acendem juntos. Colocar o cursor dentro de um bloco (não sobre uma palavra-chave) realça o par envolvente mais próximo. Conteúdo comum entre tags não realça nada.

Ele se atualiza conforme o cursor se move e não precisa de atalho.

Ligando e desligando

Exibir ▸ Realçar a tag/bloco correspondente — ligado por padrão, e a escolha é lembrada entre sessões.

Os dois tipos de par

Tags (marcação)

Em HTML e XML, com o cursor em uma tag de abertura ou fechamento, o nome do elemento nas duas tags é emoldurado. O aninhamento de tags de mesmo nome é resolvido por profundidade, tags autofechadas (<br/>) não têm par, e um > dentro do valor de um atributo entre aspas nunca encerra a tag antes da hora. Um < usado como texto ou operador de comparação nunca dispara o realce — a correspondência se baseia no estilo de tag do analisador léxico, não em sinais de menor/maior crus.

Palavras-chave de bloco (linguagens)

Pares de palavras-chave inteiras, contados com aninhamento correto e ignorando tudo o que está dentro de comentários e strings. Já vêm de fábrica:

Linguagem Pares
Shell (bash) if … fi (com elif/else), do … done, case … esac
C / C++ pré-processador #if / #ifdef / #ifndef … #endif (com #elif/#else)
SQL begin … end, case … end (sem diferenciar maiúsculas)

C/C++ usa isso apenas para o pré-processador

Blocos { } comuns de C/C++ são tratados pela correspondência de chave de um único caractere, não por este recurso — então um .cpp sem condicionais #if…#endif não mostra nada aqui, por design.

Acrescentando pares para outra linguagem

Os pares são dados, não código: eles ficam no JSON do colorizador da linguagem, então você pode acrescentá-los para qualquer linguagem sem recompilar. No arquivo de colorizador acrescente "tagMatch": true para marcação, ou uma lista "blockPairs" para pares de palavras-chave, por exemplo:

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

Um arquivo de colorizador do usuário eclipsa o de fábrica, então você pode substituir ou ampliar os integrados. Veja Coloração de sintaxe para saber onde ficam os arquivos de colorizador.

Observações e limites

  • A correspondência varre uma janela ao redor do cursor, então um par cujas pontas estão muito distantes entre si (algo como mil linhas ou mais — por exemplo, uma guarda de inclusão de um arquivo inteiro) pode não ser encontrado.
  • A correspondência usa aninhamento estrito: uma única tag ou bloco interno não fechado impede que as tags ou blocos ao redor dele correspondam até que ele seja fechado.

Relacionado