# Vim/Repetição de comandos
## Repetição de comandos

Para repetir a última edição saia do modo de Inserção e pressione ponto (.):
Para inserir um texto que deve ser repetido várias vezes:
* Posicione o cursor no local desejado;
* Digite o número de repetições;
* Entre em modo de inserção;
* Digite o texto;
* Saia do modo de inserção (tecle ESC).
Por exemplo, se você quiser inserir oitenta traços numa linha, em vez de digitar um por um, você pode digitar o comando:
Veja, passo a passo, o que aconteceu:
* 80: repetir 80 vezes o comando a seguir:
** i: entrar no modo de inserção;
** -: insere o caractere;
** <Esc>: finaliza a inserção.

## Repetindo a digitação de uma linha

Para repetir a linha acima (modo insert) use
Para repetir a linha abaixo (modo insert)
Para copiar a linha atual
Para colar a linha copiada
Para repetir uma linha completa
O atalho acima só funcionará para uma linha semelhante, experimente digitar
e veja o resultado

## Registradores: guardando trechos em "gavetas"

Os registradores a-z são uma espécie de área de transferência múltipla.
Você deve estar em modo normal e então digitar uma aspa dupla e uma das 26 letras do alfabeto, em seguida uma ação ― por exemplo, yy (copiar) dd (apagar). Depois, mova o cursor para a linha desejada e cole com "rp, onde r corresponde ao registrador para onde o trecho foi copiado.
| Exemplo | Explicação |
| "ayy | copia a linha atual para o registrador a |
| "ap | cola o conteúdo do registrador a abaixo |
| "bdd | apaga a linha atual para o registrador b |

## Macros: gravando uma seqüência de comandos

Imagine que você tem o seguinte trecho de código:
e quer que ele fique assim:
Não podemos simplesmente executar repetidas vezes um comando do Vim, pois precisamos incluir texto tanto no começo quanto no fim da linha? É necessário mais de um comando para isso.
É aí que entram as macros. Podemos gravar até 26 macros, já que elas são guardadas nos registros do Vim, que são identificados pelas letras do alfabeto. Para começar a gravar uma macro no registro a, digitamos
No modo Normal. Tudo o que for digitado a partir daí será gravado no registro a até que terminemos com o comando <esc>q novamente (no modo Normal). Assim, podemos solucionar nosso problema:
| qa | Inicia a gravação da macro no registro a (ou qualquer outro à escolha). |
| ^ | Move para o começo da linha. |
| i#include "<Esc> | Insere a string #include " no começo da linha. |
| A"<Esc> | A inicia o modo insert no final da linha, coloca aspas " e sai com <esc> |
| j | Vai para a próxima linha. |
| q | Para a gravação da macro. |
Agora você só precisa posicionar o cursor na primeira letra de uma linha como esta
E executar a macro do registro a quantas vezes for necessário, usando o comando @. Para executar quatro vezes, digite:
Este comando executa quatro vezes o conteúdo do registro a.
Caso tenha executado a macro uma vez pode repeti-la com o comando

## Repetindo substituições

Se você fizer uma substituição em um intervalo como abaixo
Pode repetir esta substituição em qualquer linha que estiver apenas usando este símbolo
O vim substituirá na linha corrente isto por aquilo.

## Repetindo comandos :

O atalho acima repete o último comando no próprio modo de comandos

## Scripts Vim

Usando um script para modificar um nome em vários arquivos:
* Crie um arquivo chamado "subs.vim" contendo os comandos de substituição e o comando de salvamento :wq.
Para executar um script, digite o comando

## Usando o comando bufdo

Com o comando :bufdo podemos executar um comando em um conjunto de arquivos de forma rápida. No exemplo a seguir, abriremos todos os arquivos HTML do diretório atual, efetuarei uma substituição e em seguida salvo todos.
Para fechar todos os arquivos faça:
O comando :wall salva ("write") todos ("all") os arquivos abertos pelo comando vim *.html. Opcionalmente você pode combinar :wall e :qall com o comando :wqall, que salva todos os arquivos abertos e em seguida sai do Vim.

## Colocando a última busca em um comando

Observação: (lembre-se CTRL = ^)

## Inserindo o último comando

Se preceder com ':' você repete o comando, equivale a acessar o histórico de comandos com as setas