Dia 9: Repetindo
[.]
repete o último comando de alteração de texto que foi feito. Por exemplo,
[d][w]
irá apagar da posição do cursor até a próxima palavra; ao usar [.]
depois disso, o Vim irá novamente apagar da posição do cursor até a próxima
palavra. [c][w]alteração[Esc]
irá substituir a palavra atual por "alteração";
ao pressionar [.]
, o Vim irá substituir novamente a palavra atual por
"alteração".
Note que apenas comandos de alteração de texto são repetidos por [.]
;
comandos de movimentação não são guardados. Assim, apesar de parecer que
[c][w]alteração[Esc]
irá ficar substituindo "alteração" por "alteração" no
mesmo lugar, você ainda pode mover o cursor para outro lugar e fazer novamente
a mesma troca.
[2][w]
irá mover o cursor duas palavras para frente, mas esta movimentação
não será repetida por [.]
.
Para comandos mais complexos, existem macros de teclado.
Para gerar uma macro de teclado, deve ser utilizado o comando [q]
seguido de
um registrador e qualquer comando feito até que seja usado [q]
novamente será
inserido na macro. Para fazer o "play" da macro, deve ser utilizado [@]
seguido do registrado.
Como exemplo, imagine que se queria percorrer várias linhas e que, para cada uma, queria que seja inserido uma aspas no começo e outra no final. Desconsiderando a possibilidade de expressões regulares, poderia ser feito:
[q][a][I]["][Esc][A]["][Esc][j][q]
Indo por partes:
[q][a]
inicia uma macro de teclado no registrador "a";[I]
move o cursor para o primeiro caractere não-branco da linha e entra em modo de inserção;["]
insere a aspas do começo;[Esc]
sai do modo de inserção;[A]
move o cursor para o final da linha e entra em modo de inserção;["]
insere a aspas do final;[Esc]
retorna para o modo de comando;[j]
mover o cursor para a linha debaixo;[q]
encerra a macro de teclado.
Agora, toda vez que for feito [@][a]
, a macro irá "tocar", serão adicionadas as aspas no
começo e no final e o cursor irá mover para a próxima linha. Assim como os outros comandos
do Vim, é possível repetir o comando indicando o número de execuções a serem feitas; por
exemplo, [1][0][0][0][@][a]
irá repetir a macro 1000 vezes ou até que algo falhe, como mover
o cursor para a linha de baixo.
E "fun fact": Os registradores de macros e os registradores de área de transferência são
os mesmos. Assim, se depois de gerar a macro acima for feito ["][a][p]
, a sequência
da macro será colada no conteúdo do texto.