# Vim/Buscas e substituições
## Buscas

Para fazer uma busca, certifique-se de que está em modo normal, pressione "/" e digite a expressão a ser procurada.
Para encontrar a primeira ocorrência de "foo" no texto:
Busca a palavra 'foo'
Repete a última busca
Posiciona o cursor três linhas após a ocorrência da palavra 'teste'
* Para encontrar as próximas ocorrências, tecle "n".
* Para encontrar as ocorrências anteriores, tecle "N".
Fazer buscas pelo valor hexadecimal de um caractere
Dica: Um meio mais rápido para encontrar a próxima ocorrência de uma palavra sob o cursor, é teclar "*". Para encontrar uma ocorrência anterior da palavra sob o cursor, tecle "#". (Para isso, o cursor deve estar posicionado sobre a palavra que deseja procurar.)

## Substituições

Para fazer uma busca, certifique-se de que está em modo normal, em seguida digite use o comando ":s", conforme será explicado.
Para substituir "foo" por "bar" na linha atual:
Para substituir "foo" por "bar" da primeira à décima linha do arquivo:
Para substituir "foo" por "bar" da primeira à última linha do arquivo:
Ou simplesmente:
O comando ":s" possui muitas opções que modificam seu comportamento.

## Exemplos

* Busca usando alternativas:
Buscará "endif", "endwhile" e "endfor". Observe que é necessário "escapar" os caracteres \(, \| e \), caso contrário eles serão interpretados como caracteres comuns.
* Quebra de linha
* Ignorando maiúsculas e minúsculas
Uma dica é colocar no seu arquivo de configuração 'vimrc' veja como editar preferências
se você não sabe ainda como colocar estas preferências no arquivo de configuração pode ativa-las em modo de comando precedendo-as com dois pontos, assim:
* Procurando palavras repetidas
Um exemplo prático da expressão regular que elimine todas as linhas nas quais houver uma palavra
que se repita pelo menos uma vez, ou seja, mantenha apenas palavras que só aparecem uma vez.
Digamos que tenhamos o seguinte arquivo
A Solução seria
Casando tudo .* seguido por uma quebra de linha \n, seguido pelo padrão precedente \1
* Multilinha
Buscará "Hello World", separados por qualquer número de espaços, incluindo quebras de linha. Buscará as três seqüências:
* Buscar linhas de até 30 caracteres de comprimento
* Apaga todas as tags html/xml de um arquivo
* Apaga linhas vazias
Ou
* Remover duas ou mais linhas vazias entre parágrafos diminuindo para uma só linha vazia.
Você pode criar um mapeamento e colocar no seu ~/.vimrc
No exemplo acima ',s' é um mapeamento para reduzir linhas em branco sucessivas para uma só
* Remove não dígitos (não pega números)
* Remove final de linha DOS/Windows ^M que tem código hexadecimal igual a '0d'
* Troca palavras de lugar usando expressões regulares
* Inserir numeração de linhas do arquivo
* Modificando todas as tags html para minusculo
* move linhas 10 a 12 para além da linha 30

## O comando global 'g'

* buscando um padrao e gravandoo em outro arquivo
Para copiar linhas começadas com "Error" para o final do arquivo faça:
Obs: O comando copy pode ser abreviado 'co' ou ainda você pode usar 't' para mais detalhes leia
Entre as linhas que contiverem fred e joe substitua
As opções 'gic' correspondem a global, ignore case e confirm, podendo ser omitidas deixando só o global
pegar caracteres numericos e jogar no final do arquivo?
inverter a ordem das linhas do arquivo?
apagar as linhas que contém "Line commented"
copiar determinado pardrão para um registro
copiar linhas que contém um padrão e a linha subsequênte para o final

##### Reordenando parágrafos

Digamos que você tenha um arquivo com o seguinte conteúdo
Para reordenar esses blocos de modo que o 4º bloco fique no começo e o bloco 1 fique no final
fazemos o seguinte:
Adicionamos uma linha ao final do arquivo
Em seguida executamos o seguinte comando global
Na prática o vim moverá os blocos 2 a 4 para o começo usando o comando "normal" dap (delete parágrafo)
gg que salta para o começo do arquivo e o comando de colar P.

## Dicas

Para colocar a última busca em uma substituição faça:
A dupla barra corresponde ao ultimo padrão procurado, e portanto o comando abaixo fará a substituição da ultima busca por casinha

### Filtrando arquivos com o vimgrep

Por vezes sabemos que aquela anotação foi feita, mas no momeno esquecemos em qual arquivo está, no exemplo abaixo procuramos a palavra dicas à partir da nossa pasta pessoal pela palavra 'dicas' em todos os arquivos com extensão 'txt'
O comando

## Copiar a partir de um ponto

O vim sempre necessita de um intervalo (inicial e final) mas se você usar ';' ele considera a primeira linha como segundo ponto do intervalo, e no caso acima estamos dizendo (nas entrelinhas) linhas 19+3
De forma hanáloga podemos usar como referência um padrão qualquer
O comando acima diz: à partir da linha que contém 'palavra' incluindo as 10 próximas linhas mova 'm' para a primeira linha '0', ou seja antes da linha 1.

## Dicas das lista vi-br

Gostaria de um comando que mudasse para
Para maiores informações sobre buscas e substituições:

## Dicas do dicas-l

* fonte: http://www.dicas-l.com.br/dicas-l/20081228.php

### Junção de linhas com vim

Colaboração: Rubens Queiroz de Almeida
Recentemente precisei combinar, em um arquivo, duas linhas consecutivas. O arquivo original continha linhas como
E assim por diante. Eu precisava converter este arquivo para algo como:
Para isto, basta emitir o comando:
Explicando: