Pular para conteúdo

Plugin Snippets

Digite um prefixo curto, pressione ++tab++ e ele se expande em uma construção inteira — um laço for, o esqueleto de uma classe, uma tabela Markdown — com o cursor pronto na primeira lacuna que você precisa preencher. Tab/Shift+Tab percorrem os campos, Esc termina. O plugin também fornece Arquivo ▸ Novo a partir de um modelo… para gerar arquivos inteiros.

Expandindo um snippet

  1. Digite o prefixo de um snippet (digamos for em um arquivo C++).
  2. Pressione ++tab++. O prefixo é substituído pelo corpo do snippet — como um único passo de desfazer — e o primeiro campo fica selecionado, pronto para ser sobrescrito.
  3. Pressione ++tab++ para saltar ao campo seguinte, ++shift+tab++ para voltar.
  4. Depois do último campo, ++tab++ posiciona o cursor na posição final do snippet. ++esc++ encerra a sessão a qualquer momento, deixando o texto como foi digitado.

Se a palavra antes do cursor não for um prefixo de snippet, ++tab++ recua como de costume — a tecla só é emprestada quando há algo a expandir. Enquanto o popup de autocompletar está aberto, ++tab++ pertence ao popup.

Uma expansão de várias linhas herda o recuo da linha em que você a digitou, e os fins de linha dela seguem a convenção do documento (CRLF/LF).

Snippets no popup de autocompletar

Os prefixos dos snippets também aparecem no popup de autocompletar, marcados com um pequeno glifo para que se destaquem entre as palavras comuns. Aceitar um item de snippet o expande imediatamente e inicia a sessão de campos — o mesmo que digitar o prefixo e pressionar ++tab++.

O que um snippet pode conter

Elemento Significado
$1 … $9 Campos de parada, visitados em ordem numérica (independentemente da posição deles no corpo).
${1:valor} Um campo com conteúdo inicial, selecionado quando visitado.
$0 Onde o cursor termina depois do último campo (por padrão, o fim do snippet).
$FILENAME O nome de arquivo do documento (vazio em buffers não salvos).
$DATE A data de hoje, no formato ISO (2026-07-06).
$SELECTION O texto selecionado quando o snippet foi acionado.
$CLIPBOARD O texto atual da área de transferência.
\$ Um cifrão literal.

Qualquer coisa malformada é inserida literalmente em vez de falhar. Um índice de campo repetido no corpo mantém apenas a primeira ocorrência como campo ativo.

Gerenciando snippets

Preferências ▸ Snippets lista todos os snippets — os conjuntos incluídos e os seus. A partir dali você pode:

  • Adicionar… um snippet novo: prefixo, escopo (identificadores de linguagem separados por vírgula, como cpp, c; vazio ou * vale em toda parte), descrição e o corpo.
  • Editar… seus snippets. Editar um snippet incluído cria uma cópia sua, que tem precedência sobre o incluído (mesmo prefixo e escopo).
  • Remover seus snippets (os incluídos não podem ser removidos — eclipse-os).

Conjuntos incluídos vêm para C/C++, Python, JavaScript/TypeScript e Markdown, além de dois auxiliares universais (date, clip). Seus snippets são armazenados como JSON no diretório de dados do plugin (snippets/user.json); você também pode colocar ali arquivos *.json adicionais — o formato corresponde ao dos arquivos incluídos:

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

Os corpos são arrays de linhas. Um array "scopes" por snippet substitui o padrão "language" do arquivo.

Modelos de arquivo

Arquivo ▸ Novo a partir de um modelo… abre um seletor de estruturas de arquivo — um fonte C++ com main, um cabeçalho com guarda de inclusão, um script Python, um documento Markdown, uma página HTML. O modelo escolhido abre como um documento novo, não salvo, com as variáveis ($DATE, $CLIPBOARD, …) já substituídas; os elementos de campo se reduzem ao texto padrão deles.

Os modelos também são arquivos JSON (templates/*.json, tanto os incluídos quanto os do diretório de dados do plugin):

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

Limitações

  • Um índice de campo repetido não é espelhado (digitar no campo 1 não atualiza um segundo $1); as ocorrências posteriores são texto comum.
  • Marcadores aninhados (${1:${2:x}}) não são suportados; o texto interno é tomado literalmente.
  • $FILENAME fica vazio em buffers não salvos.