The source content for blog.juliobiason.me
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

5.5 KiB

+++ title = "Mudando de Modos – Modo de Inserção" date = 2015-12-22 +++

Esta é a parte em que você vai finalmente começar a editar o texto.

Agora que você sabe que existe mais de um modo de edição e como o cursor funciona, podemos finalmente começar a ver como se passa de um modo para o outro -- e, no processo, entender como editar um texto no VIM.

Primeiro, é preciso saber que o Modo Normal é o ponto central para todos os outros modos -- o jeito mais fácil de passar de um modo para o outro é através do Modo Normal. E, de qualquer modo[^1], para ir para o modo normal basta pressionar Esc.

Lembre-se: Esc irá sempre voltar para o modo normal para que você possa passar para os demais modos. Esc em modo normal irá continuar em modo normal[^2].

Para passar do modo normal para o modo de inserção, você deve usar o seguinte:

i

Vai para o modo de inserção na posição do cursor (lembre-se do capítulo anterior: o cursor está no canto inferior esquerdo do cursor, logo qualquer coisa que você digitar vai aparecer antes da letra onde o cursor se encontrava antes de pressionar i).

I

Move o cursor para o primeiro caracter que não seja espaço ou tabulação na linha e entra em modo de inserção (semelhante à _i).

a

Move o cursor uma posição pra frente e entra em modo de inserção (ou o mesmo que li).

A

Move o cursor para o fim da linha e entra em modo de inserção (Seria quase um $i, só que $ pára no último não branco da linha -- se considerarmos o caracter de quebra de linha um caracter "branco" -- e i ficará antes desse não-branco).

o

Insere uma linha em branco depois do cursor e entra em modo de inserção.

O

Insere uma linha em branco acima do cursor e entra em modo de inserção.

R

Entra em modo de inserção, mas substitui as letras atuais ao invés de adicionar mais. Sim, é um modo de substituição ("replace"), mas ainda é considerado um modo de inserção.

Ok, pequena pausa para acertar os ponteiros agora: Uma coisa que eu comentei anteriormente foi que, no modo normal é possível definir o número de vezes que um comando será repetido. Por mais estranho que isso possa parecer, todos os comandos acima também aceitam um número de repetições. Por exemplo, 20A-[Esc] irá repetir o comando A- 20 vezes, efetivamente colocando 20 "-" na linha atual; 20Oolá[Esc] irá adicionar 20 linhas de olá no seu texto, a partir da posição do cursor.

Sua vida acabou de mudar.

Quem estava prestando atenção deve ter notado que eu pulei r como opção de modo de inserção e todos os demais comandos tem uma versão em minúsculas e maiúsculas. O motivo é que r tem um funcionamento, digamos, peculiar.

r, por si só, espera por uma tecla para substituir o caracter sob o cursor. Seria o equivalente a fazer R, pressionar uma tecla e, na sequência, pressionar [Esc] para sair do modo de inserção. O estranho, no entando, é quando é definido um número de vezes que r deve ser executado: Neste caso, o caracter sob o cursor é alterado para o caracter indicado, o cursor é movido para o próximo caracter e o processo se repete até o número de vezes indicado (ou seja alcançado o final da linha). 20r-[Esc] irá, efetivametne, substituir os 20 próximos caracteres por "-" -- que não seria o mesmo que digitar, manualmente, r- 20 vezes.

Existem ainda outros dois comandos para entrar em modo de inserção: c e s. Existem algumas diferenças configuráveis entre ambos, mas o funcionamento é o mesmo: Removem os caracteres indicados pela movimentação e passam para o modo de inserção.

Como assim "movimentação"?!?

De novo, pausa para acertar os ponteiros: no capítulo #2.2, eu falei sobre comandos do modo normal que movimentam o cursor. Aqui, c e s não vão entrar em modo de inserção até que você adicione uma sequência de movimentação. Assim: s$ irá remover tudo da posição de cursor até o final da linha e entrará em modo de inserção, s% irá remover tudo da posição do cursor até o próximo elemento que "fecha" o elemento atual (aspas, parênteses, colchetes, etc) e entrará em modo de inserção, c2f. irá remover tudo da posição do cursor até o segundo ponto na linha e entrará em modo de inserção e assim por diante.

A ficha finalmetne caiu

Embora c e s funcionem de forma semelhante, C e S não: C irá apagar tudo da posição do cursor até o final da linha enquanto que S irá remover todo o conteúdo da linha, não importando a posição do cursor. Logicamente, depois de fazerem isso, ambos entram em modo de inserção. Com um número de repetições, no entanto, ambos funcionam da mesma forma -- tanto 20S quanto 20C irão remover a linha atual e mais 19 e entrar em modo de edição.

E, só pra lembrar: Pressionar [Esc] irá voltar para o modo normal.

{% note() %} Todas as imagens são copyright (C) seus respectivos donos. {% end %}

[^1] ... exceto o modo Ex, mas como eu falei antes, não é um modo muito útil hoje em dia e, portanto, eu estou ignorando ele daqui pra frente.

[^2] ... O que explica porque vários programadores experientes em VIM tem a mania de, algumas vezes, ficar pressionando [Esc] rapidamente quando algo sai errado.

{{ chapters(prev_chapter_link="./01-02-entendendo-o-cursor", prev_chapter_title="Entendendo o Cursor", next_chapter_link="./01-04-modo-visual", next_chapter_title="Modo Visual") }}