Text Objects
Definição curta: Text objects são regiões de texto definidas por delimitadores (como palavras, sentenças, parágrafos ou blocos de código) que podem ser selecionadas ou operadas como uma unidade.
Antes de começar
- Saber sair do Neovim (
:q) e navegar em modo normal
O que você vai aprender
- Explicar Inside vs Around com suas palavras
- Explicar Text objects de delimitadores com suas palavras
- Explicar Text objects de texto com suas palavras
- Localizar o assunto desta página no
:helpdo seu próprio Neovim
O que é
Text objects permitem selecionar ou operar sobre estruturas sintáticas delimitadas. Enquanto motions movem para uma posição, text objects selecionam uma região completa.
A sintaxe é i<delimitador> (inside) ou a<delimitador> (around).
Índice de sub-tópicos
- Inside vs Around
- Text objects de delimitadores
- Text objects de texto
- Text objects de código
- Combinações com operators
Inside vs Around
| Comando | Significado | Inclui delimitadores |
|---|---|---|
i<obj> | Inside | Não |
a<obj> | Around | Sim |
Exemplo com aspas
"Hello World"
ci"muda o conteúdo entre aspas (exclui as aspas)ca"muda as aspas e o conteúdo (inclui as aspas)
Text objects de delimitadores
| Delimitador | Inside | Around |
|---|---|---|
Parênteses () | i( ou ib | a( |
Colchetes [] | i[ | a[ |
Chaves {} | i{ ou iB | a{ ou aB |
Ângulos <> | i< | a< |
Aspas duplas " | i" | a" |
Aspas simples ' | i' | a' |
Backticks ` | i` | a` |
Exemplo: deletar conteúdo entre parênteses
foo = func(a, b, c)
Com o cursor em qualquer lugar dentro dos parênteses:
di(deletaa, b, c(conteúdo)da(deleta(a, b, c)(tudo com parênteses)
Text objects de texto
| Comando | Descrição |
|---|---|
iw | Palavra atual (inside) |
aw | Palavra atual + espaço (around) |
iW | WORD atual (inside) |
aW | WORD atual + espaço (around) |
is | Sentença atual (inside) |
as | Sentença atual + espaço (around) |
ip | Parágrafo atual (inside) |
ap | Parágrafo atual + newline (around) |
Text objects de código
Dependem do Treesitter para linguagens estruturadas.
| Comando | Descrição |
|---|---|
iB | Bloco {} (inside) |
aB | Bloco {} + delimitadores (around) |
ib | Bloco () (inside) |
ab | Bloco () + delimitadores (around) |
Text objects via Treesitter (Neovim 0.10+)
Com Treesitter configurado, novos text objects ficam disponíveis:
-- Exemplo de text objects Treesitter
-- iC = inside class
-- aC = around class
-- if = inside função
-- af = around funçãoCombinações com operators
Text objects são quase sempre usados com operators.
Workflow: mudar string
- Cursor dentro de
"texto"→ci"→ digitar novo conteúdo ci(para mudar argumento de funçãoci{para mudar bloco de código
Diagrama de uso comum
flowchart LR
A["cursor\ndentro da\nestrutura"] --> B["operator\nc, d, y, ~"]
B --> C{"tipo?"}
C -->|inside| D["i<delim>\nconteúdo"]
C -->|around| E["a<delim>\ndelimitadores"]Erros comuns
- Confundir
icoma.ci"troca o conteúdo entre as aspas;ca"leva as aspas junto. A diferença aparece no primeiro uso e some da memória no segundo. - Achar que só serve para pares de delimitadores.
ip(parágrafo) eit(tag) são objetos de texto e não têm delimitador visível. - Não perceber que o cursor pode estar em qualquer lugar dentro do objeto. É a economia inteira do recurso: você não precisa mirar.
Você aprendeu
- Inside vs Around
- Text objects de delimitadores
- Text objects de texto
- Text objects de código
- Combinações com operators
Perguntas para reflexão
- O que Inside vs Around resolve, e o que se perde sem isso?
- O que Text objects de delimitadores resolve, e o que se perde sem isso?
- O que Text objects de texto resolve, e o que se perde sem isso?
- Qual parte desta página você conseguiria reproduzir sem consultar, direto no editor?
Artigos relacionados
Veja também
- Motions — Movimentação por posição
- Operators — Ações sobre texto
- Configuração Treesitter — Text objects avançados
Referências
- Neovim Text Objects — Documentação oficial
- Treesitter textobjects — Plugin para text objects avançados