Saltar para o conteúdo

Vim/Repetição de comandos

Origem: Wikilivros, livros abertos por um mundo aberto.
< Vim

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:

  1. Posicione o cursor no local desejado;
  2. Digite o número de repetições;
  3. Entre em modo de inserção;
  4. Digite o texto;
  5. 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

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>