Usando Text Expanders para Git, PRs e Prompts de IA
Snippets do Espanso para Git, PRs e prompts de IA: use shell, área de transferência e cursor para expansões contextuais.
Um text expander transforma um atalho curto como :cm em um bloco completo de texto em qualquer campo onde você digita — mensagens de commit, descrições de PR, prompts para LLMs — eliminando a necessidade de redigitar o mesmo texto repetitivo dezenas de vezes por dia. A escolha ideal para desenvolvedores é o Espanso, um expander gratuito, open-source e multiplataforma escrito em Rust, cuja configuração completa é feita em YAML simples que pode ser versionado no git. Este artigo é um guia prático com exemplos prontos para uso: snippets reais do Espanso para comandos git, esqueletos de PR e prompts reutilizáveis de IA, além dos três recursos dinâmicos — saída de shell, injeção de clipboard e posicionamento do cursor — que transformam texto estático em ferramentas sensíveis ao contexto.
Principais Conclusões
- O Espanso é um text expander gratuito, open-source e multiplataforma escrito em Rust; instale-o no macOS com
brew install --cask espanso(macOS 11+), no Linux via pacote.debou AppImage, e no Windows pelo instalador oficial. - Para tornar um snippet de commit sensível ao contexto, injete o branch atual com uma variável shell executando
git rev-parse --abbrev-ref HEAD, garantindo que o atalho sempre expanda com o branch em que você está trabalhando. - O Espanso posiciona o cursor após a expansão com o marcador
$|$, mas só é permitido um marcador por match, e ele pode se comportar de forma inesperada em editores com indentação automática — por isso, prefira usar os esqueletos de PR na caixa de descrição do navegador. - O Espanso não possui uma variável nativa para “texto selecionado”: copie o código primeiro e, em seguida, acione um snippet que leia
{{clipboard}}para envolver uma função destacada em um prompt para LLM. - Como a configuração é feita em YAML simples, você pode versionar todo o diretório em um repositório git e compartilhar os snippets da equipe como um pacote privado do Espanso.
Por que um text expander pertence ao seu fluxo de trabalho de desenvolvimento
Um text expander é qualquer ferramenta que monitora suas teclas digitadas e substitui um atalho definido por um bloco de texto mais longo e opcionalmente dinâmico, em todo o sistema. Se o seu trabalho envolve redigitar repetidamente o mesmo texto padronizado — commits convencionais, descrições de PR, prompts recorrentes — ele se paga imediatamente. A maioria das pessoas conhece os expanders primeiro através de assinaturas de e-mail; o ganho para desenvolvedores é muito maior porque grande parte do ciclo entre terminal e GitHub é composto de boilerplate.
Três ferramentas dominam o mercado:
| Ferramenta | Plataformas | Ponto Forte |
|---|---|---|
| Espanso | Multiplataforma, open-source | Configuração em YAML simples, com suporte a scripts via shell e variáveis dinâmicas — a escolha deste artigo |
| Raycast Snippets | Focado em macOS | Funcionalidade de launcher com placeholders dinâmicos |
| TextExpander | Multiplataforma (pago) | Orientado a equipes, com grupos de preenchimento compartilhados |
Escolha o Espanso quando quiser uma configuração com suporte a scripts e versionável no git, que funcione em qualquer máquina.
Instale-o e registre o serviço em segundo plano:
# macOS (macOS 11+)
brew install --cask espanso
espanso service register
espanso start
No Linux, a documentação oficial de instalação recomenda o pacote .deb (baixe com wget e instale com sudo apt install ./espanso-debian-x11-amd64.deb) ou o AppImage, seguido de espanso service register e espanso start; o suporte ao Wayland ainda é experimental. No Windows, utilize o instalador disponível em espanso.org. Edite os snippets a qualquer momento com espanso edit e recarregue com espanso restart.
Discover how at OpenReplay.com.
Snippets para Git: expanda os comandos que você redigita
Armazene os atalhos git em um arquivo de match e deixe o :cm estruturar uma mensagem no formato Conventional Commits ou o :undo expandir um comando que você nunca lembra. Aqui está um conjunto inicial estático:
# ~/.config/espanso/match/git.yml
matches:
- trigger: ":cm"
replace: "feat($|$): "
- trigger: ":undo"
replace: "git reset --soft HEAD~1"
- trigger: ":unstage"
replace: "git restore --staged ."
- trigger: ":wip"
replace: "chore: wip [skip ci]"
O $|$ no :cm posiciona o cursor entre os parênteses para que você digite o escopo e continue sem interrupção.
Agora, torne um snippet sensível ao contexto. A extensão shell do Espanso executa um comando e insere sua saída, permitindo que você inclua o branch atual no texto:
- trigger: ":br"
replace: "{{branch}}"
vars:
- name: branch
type: shell
params:
cmd: "git rev-parse --abbrev-ref HEAD"
Digite :br no corpo de um commit ou em um comentário de PR e o atalho expande para o branch para o qual o HEAD aponta — sem copiar e colar, sem nome de branch desatualizado.
Templates de PR: um esqueleto com campos para preencher
Um atalho :pr pode expandir para um esqueleto completo com as seções Summary / Changes / Testing / Screenshots, com o cursor posicionado no primeiro campo via $|$, transformando uma caixa de PR em branco em um formulário:
- trigger: ":pr"
replace: |
## Summary
$|$
## Changes
-
## Testing
-
## Screenshots
O Espanso suporta o marcador de cursor $|$, mas só é permitido um por match — marcadores adicionais são ignorados — e a documentação alerta que ele pode se comportar de forma inesperada em expansões multilinha, pois o Espanso simula pressionamentos da tecla de seta para a esquerda, o que conflita com a indentação automática de editores de código. Acione o :pr na caixa de descrição do GitHub, não na sua IDE, e o comportamento será previsível.
Snippets para prompts de IA: scaffolds reutilizáveis para LLMs
Trate os prompts como templates de commit: defina :review, :explain e :tests uma vez e pare de reescrevê-los. As versões estáticas são apenas texto:
# ~/.config/espanso/match/ai.yml
matches:
- trigger: ":explain"
replace: "Explain the following code line by line, then note any bugs or edge cases:\n\n"
- trigger: ":tests"
replace: "Write unit tests for the following code. Cover happy path and edge cases:\n\n"
O diferencial está em injetar o código que você acabou de copiar. O Espanso não possui uma variável nativa para “texto selecionado”, então o padrão é: copie primeiro e, em seguida, acione um snippet que leia {{clipboard}} via extensão de clipboard:
- trigger: ":review"
replace: "Review this code for bugs, security, and readability:\n\n```\n{{clipboard}}\n```"
vars:
- name: clipboard
type: clipboard
Selecione uma função, pressione copiar, digite :review e você obtém um prompt de revisão de código formatado com cerca cercas de código, pronto para colar em qualquer modelo. Usuários avançados podem simular a cópia dentro de uma variável shell — a solução alternativa da comunidade executa xdotool key --clearmodifiers ctrl+c antes de ler o clipboard — mas o fluxo de dois passos (copiar e acionar) é mais simples e portável.
Como funcionam as variáveis dinâmicas do Espanso
Um snippet dinâmico lê seu valor a partir de uma extensão — type: date para timestamps, type: shell para saída de comandos e type: clipboard para {{clipboard}} — e o Espanso avalia as variáveis de cima para baixo, de modo que variáveis posteriores podem consumir as anteriores. Conforme a documentação de variáveis, as extensões shell e script recebem o escopo atual como variáveis de ambiente, razão pela qual uma variável shell pode ler uma variável de clipboard definida acima dela.
Essa ordenação permite composição. Um campo de data para uma entrada de changelog:
- trigger: ":today"
replace: "{{today}}"
vars:
- name: today
type: date
params:
format: "%Y-%m-%d"
O Espanso 2.3.0 adicionou um parâmetro tz à extensão de data para gerar horários em qualquer fuso horário IANA. Combine variáveis de shell, clipboard e data em um único match e você terá uma micro-ferramenta genuína: passe o conteúdo do clipboard por um formatador, adicione um timestamp e posicione o cursor onde você continuará digitando.
Versione sua configuração no git e compartilhe
Como a configuração do Espanso é feita em YAML simples — execute espanso path para localizar o diretório (no Linux, ~/.config/espanso) — você pode executar git init em toda a pasta, fazer push e cloná-la em cada máquina em que trabalha. Seus snippets se tornam um artefato versionado e revisável, em vez de uma configuração isolada por laptop.
Para equipes, publique snippets compartilhados de commit e PR como um pacote. O Espanso instala pacotes a partir de qualquer repositório git com a opção --git, buscando diretamente do seu host:
espanso install team-snippets --git https://github.com/your-org/espanso-snippets --external
Todos obtêm as mesmas convenções de :cm, :pr e :review com um único comando. O TextExpander oferece uma capacidade comparável por meio de grupos compartilhados; o Espanso faz isso com as ferramentas git que você já utiliza.
Comece com três arquivos — git.yml, ai.yml e um esqueleto de PR — faça o commit deles e adicione um snippet sempre que perceber que está redigitando algo. A configuração cresce com seus hábitos, e o padrão de copiar e acionar com :trigger é o recurso que transforma um expander estático em uma parte sensível ao contexto do seu fluxo de trabalho com git e IA.
Perguntas Frequentes
Como o Espanso se diferencia do Raycast Snippets e do TextExpander?
O Espanso é gratuito, open-source, multiplataforma e configurado em YAML simples que pode ser versionado no git e estendido via shell e variáveis dinâmicas. O Raycast Snippets é uma funcionalidade de launcher focada no macOS com placeholders dinâmicos. O TextExpander é um produto pago e multiplataforma voltado para equipes e grupos de preenchimento compartilhados. Escolha o Espanso quando quiser uma configuração com suporte a scripts e versionável no git, que funcione em todas as máquinas em que você trabalha.
Posso posicionar o cursor em mais de um lugar após a expansão de um snippet?
Não. O Espanso permite apenas um marcador de cursor por match; quaisquer marcadores `$|$` adicionais na mesma substituição são ignorados. A documentação também alerta que o marcador pode se comportar de forma inesperada em expansões multilinha, pois o Espanso simula pressionamentos da tecla de seta para a esquerda, o que conflita com a indentação automática de editores de código. Para esqueletos de PR, acione o snippet na caixa de descrição do navegador, e não na sua IDE, para que o cursor único seja posicionado de forma previsível.
A extensão shell é executada no diretório do meu projeto para que os comandos git funcionem?
Sim. A extensão shell do Espanso executa o comando no contexto de trabalho atual, portanto, `type: shell` com `cmd` executando `git rev-parse --abbrev-ref HEAD` retorna o branch do repositório em que você está digitando. A extensão insere a saída padrão do comando na expansão, permitindo que um único atalho como `:br` resolva para o nome do branch atual sem copiar e colar e sem valores desatualizados.
Onde o Espanso armazena sua configuração para que eu possa versioná-la no git?
Execute `espanso path` para exibir o diretório de configuração em vez de fixar um caminho no código, pois ele varia conforme o sistema operacional. No Linux, geralmente é `~/.config/espanso`, enquanto no macOS é utilizado um caminho dentro de Application Support. O diretório contém arquivos de match em YAML simples, portanto, você pode executar `git init` em toda a pasta, fazer push e cloná-la em outras máquinas. Edite os arquivos com `espanso edit` e recarregue com `espanso restart`.