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¶
- Digite o prefixo de um snippet (digamos
forem um arquivo C++). - 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.
- Pressione ++tab++ para saltar ao campo seguinte, ++shift+tab++ para voltar.
- 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. $FILENAMEfica vazio em buffers não salvos.