Motions
Definição curta: Motions são comandos que movem o cursor no buffer. São a base da navegação no Neovim e podem ser combinados com operators para formar ações compostas.
Antes de começar
- Saber sair do Neovim (
:q) e navegar em modo normal
O que você vai aprender
- Explicar Motions de caractere com suas palavras
- Explicar Motions de palavra com suas palavras
- Explicar Motions de linha com suas palavras
- Localizar o assunto desta página no
:helpdo seu próprio Neovim
O que é
Motions são comandos de movimento que determinam onde uma ação subsequente (operator) será aplicada. Esta separação entre “o que fazer” e “onde fazer” é o que torna o Neovim tão eficiente — um único operator pode ser reutilizado com diferentes motions.
Por exemplo, dw usa o operator d (delete) com o motion w (word), deletando a palavra inteira à frente.
Índice de sub-tópicos
- Motions de caractere
- Motions de palavra
- Motions de linha
- Motions de busca
- Motions de objeto de texto
- Motions count
Motions de caractere
Movem o cursor um caractere por vez. São os motions mais básicos.
| Motion | Descrição |
|---|---|
h | Caractere à esquerda |
l | Caractere à direita |
j | Linha abaixo |
k | Linha acima |
space | Caractere à direita (like l) |
backspace | Caractere à esquerda (like h) |
Diagrama de movimentação por caracteres
flowchart LR
A["<--- h / bs"] --> B["cursor\nk\nj"]
B --> C["l / space --->"]
B --> D["j (down)"]
D --> B
B --> E["k (up)"]
E --> BMotions de palavra
Movem o cursor entre palavras, sendo mais eficientes para navegação em texto.
| Motion | Descrição |
|---|---|
w | Próximo início de palavra |
W | Próximo início de PALAVRA (maior) |
b | Início da palavra anterior |
B | Início da PALAVRA anterior |
e | Fim da palavra seguinte |
E | Fim da PALAVRA seguinte |
ge | Fim da palavra anterior |
gE | Fim da PALAVRA anterior |
Diferença entre word e WORD
- word: sequência de caracteres alfanuméricos ou underscore
- WORD: qualquer sequência de caracteres não-brancos
Exemplo: foo-bar_baz qux contém 3 words mas 2 WORDs.
Motions de linha
Movem o cursor dentro da linha atual.
| Motion | Descrição |
|---|---|
0 | Primeiro caractere da linha |
^ | Primeiro caractere não-branco |
$ | Último caractere da linha |
g_ | Último caractere não-branco |
| ` | ` |
f<char> | Próximo <char> na linha |
F<char> | <char> anterior na linha |
t<char> | Antes do próximo <char> |
T<char> | Após do <char> anterior |
Exemplo prático: f e t
Hello, World!
^ cursor
f,move para a vírgulat,move para o espaço antes da vírgula3f omove para o terceirooem “World”
Motions de busca
Buscam padrões no documento.
| Motion | Descrição |
|---|---|
/<pat> | Buscar padrão para frente |
?<pat> | Buscar padrão para trás |
n | Próxima ocorrência (mesma direção) |
N | Ocorrência anterior (direção oposta) |
* | Buscar palavra sob cursor (para frente) |
# | Buscar palavra sob cursor (para trás) |
Diagrama de busca incremental
sequenceDiagram
participant User
participant Nvim
User->>Nvim: /pattern<Enter>
Note over Nvim: Busca incremental conforme digita
Nvim-->>User: Highlights matches
User->>Nvim: n (próximo)
Note over Nvim: Salta para próximo match
User->>Nvim: N (anterior)
Note over Nvim: Salta para match anteriorMotions de objeto de texto
Movem para estruturas sintáticas do código/texto.
| Motion | Descrição |
|---|---|
( ) | Sentença anterior/próxima |
{ } | Parágrafo anterior/próximo |
[[ ]] | Bloco de código anterior/próximo (syncped) |
[] ][ | Akhir de função anterior/próximo |
[m ]m | Início de método anterior/próximo (Java-style) |
Motions count
Todos os motions aceitam um count (contagem) como prefixo.
3w # Move 3 palavras para frente
2j # Move 2 linhas para baixo
10l # Move 10 caracteres para direitaFórmula de count
<count> + <motion> = <resultado>
Exemplo: 3dw é equivalente a d3w (deletar 3 palavras).
Erros comuns
- Usar as setas. Funciona, e é exatamente por isso que atrasa o aprendizado: você nunca sente falta de
w,b,f— que são o que compõe com os operadores. - Confundir
wcomW. Minúscula respeita pontuação; maiúscula só quebra em espaço. Em código, a diferença aparece a cadafoo.bar(). - Esquecer que movimento aceita contagem.
3wexiste, ed3wtambém. Quase todo mundo descobre isso tarde demais.
Você aprendeu
- Motions de caractere
- Motions de palavra
- Motions de linha
- Motions de busca
- Motions de objeto de texto
Perguntas para reflexão
- O que Motions de caractere resolve, e o que se perde sem isso?
- O que Motions de palavra resolve, e o que se perde sem isso?
- O que Motions de linha 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
- Operators — Comandos que usam motions
- Text Objects — Seleção estrutural
- Modos do Neovim — Visão geral dos modos
Referências
- Neovim Motion Documentation — Documentação oficial
- Vim Motions cheatsheet — Referência completa