Vim/Repetição de comandos
Repetição de comandos
[editar | editar código-fonte]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:
80i-<Esc>
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
[editar | editar código-fonte]Para repetir a linha acima (modo insert) use
Control + y
Para repetir a linha abaixo (modo insert)
Control + e
Para copiar a linha atual
yy
Para colar a linha copiada
p
Para repetir uma linha completa
Control-x Control-l
O atalho acima só funcionará para uma linha semelhante, experimente digitar
uma linha qualquer com algum conteúdo uma linha <Control-x Control-l>
e veja o resultado
Registradores: guardando trechos em "gavetas"
[editar | editar código-fonte]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
[editar | editar código-fonte]Imagine que você tem o seguinte trecho de código:
stdio.h fcntl.h unistd.h stdlib.h
e quer que ele fique assim:
#include "stdio.h" #include "fcntl.h" #include "unistd.h" #include "stdlib.h"
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
qa
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
stdio.h
E executar a macro do registro a quantas vezes for necessário, usando o comando @
. Para executar quatro vezes, digite:
4@a
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
[editar | editar código-fonte]Se você fizer uma substituição em um intervalo como abaixo
:5,32s/isto/aquilo/g
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 :
[editar | editar código-fonte]@:
O atalho acima repete o último comando no próprio modo de comandos
Scripts Vim
[editar | editar código-fonte]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.
%s/bgcolor="white"/bgcolor="#eeeeee"/g wq
Para executar um script, digite o comando
:source nome_do_script.vim
Usando o comando bufdo
[editar | editar código-fonte]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.
vim *.html :bufdo %s/bgcolor="white"/bgcolor="#eeeeee"/g | :wall
Para fechar todos os arquivos faça:
:qall
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
[editar | editar código-fonte]Observação: (lembre-se CTRL = ^)
:^r/
Inserindo o nome do arquivo no comando
[editar | editar código-fonte]:^r%
Inserindo o último comando
[editar | editar código-fonte]^r:
Se preceder com ':' você repete o comando, equivale a acessar o histórico de comandos com as setas
:^r:
Para repetir exatamente a última inserção
[editar | editar código-fonte]i<c-a>