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 :help do 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

    Movem o cursor um caractere por vez. São os motions mais básicos.

    MotionDescrição
    hCaractere à esquerda
    lCaractere à direita
    jLinha abaixo
    kLinha acima
    spaceCaractere à direita (like l)
    backspaceCaractere à 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 --> B

    Motions de palavra

    Movem o cursor entre palavras, sendo mais eficientes para navegação em texto.

    MotionDescrição
    wPróximo início de palavra
    WPróximo início de PALAVRA (maior)
    bInício da palavra anterior
    BInício da PALAVRA anterior
    eFim da palavra seguinte
    EFim da PALAVRA seguinte
    geFim da palavra anterior
    gEFim 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.

    MotionDescrição
    0Primeiro 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írgula
    • t, move para o espaço antes da vírgula
    • 3f o move para o terceiro o em “World”

    Motions de busca

    Buscam padrões no documento.

    MotionDescrição
    /<pat>Buscar padrão para frente
    ?<pat>Buscar padrão para trás
    nPróxima ocorrência (mesma direção)
    NOcorrê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 anterior

    Motions de objeto de texto

    Movem para estruturas sintáticas do código/texto.

    MotionDescriçã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 ]mIní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 direita

    Fó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 w com W. Minúscula respeita pontuação; maiúscula só quebra em espaço. Em código, a diferença aparece a cada foo.bar().
    • Esquecer que movimento aceita contagem. 3w existe, e d3w també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

    1. O que Motions de caractere resolve, e o que se perde sem isso?
    2. O que Motions de palavra resolve, e o que se perde sem isso?
    3. O que Motions de linha resolve, e o que se perde sem isso?
    4. Qual parte desta página você conseguiria reproduzir sem consultar, direto no editor?

    Artigos relacionados

    Veja também

    Referências