Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Localizar e substituir no VIM

Acompanhando a aula, notei que para localizar e substituir o comando

:s/encontre/altere

Só vai funcionar se o cursor estiver na linha onde a string desejada se encontra. Testei buscando varias palavras diferentes e se o cursor não estiver na palavra, sempre dá o erro E486: Pattern not found: .

Era pra ser assim mesmo? Me parece pouco producente a necessidade de deixar o cursor em cima, já que a função do comando é encontrar.

2 respostas
solução!

Olá!

Entendo a sua frustração em relação à necessidade de posicionar o cursor na linha onde a string desejada se encontra para utilizar o comando de localizar e substituir no VIM. Realmente, pode parecer pouco produtivo ter que fazer isso, já que a função do comando é encontrar.

No entanto, essa é a forma como o comando de substituição funciona no VIM. Ele substitui apenas a primeira ocorrência da string na linha corrente, a menos que você adicione a flag "g" no final do comando, que significa "global" e faz a substituição em todas as ocorrências da linha.

Por exemplo, se você quiser substituir todas as ocorrências da palavra "encontre" pela palavra "altere" em uma linha, você pode usar o seguinte comando:

:s/encontre/altere/g

Dessa forma, todas as ocorrências da palavra "encontre" na linha serão substituídas pela palavra "altere".

Se você quiser substituir todas as ocorrências da palavra "encontre" pela palavra "altere" em todo o arquivo, você pode usar o seguinte comando:

:%s/encontre/altere/g

Esse comando substituirá todas as ocorrências da palavra "encontre" pela palavra "altere" em todas as linhas do arquivo.

Bons estudos!

Encontrei outra discrepancia de funcionamento do que é passado na aula.

print do terminal

Usando o comando:

:s/kerberos/Cerberus/g

eu esperava que todas as ocorrencias na primeira linha fossem alteradas, mas como se pode ver na imagem, a última ocorrência da linha não foi modificada.

O que pode ter acontecido?

ATUALIZANDO

Copiei e colei repetidas vezes a linha e fiz o comando:

:%s/kerberos/Cerberus/g

e modificou todas as ocorrencias de todas as linhas exceto as ultimas ocorrencias de cada linha ficando :

print do terminal

Por acaso o sustenido (#) funciona como um filtro de exceção, um limite para os comandos? O que é isso? Estou confuso, quantas variáveis devem ser consideradas para que possamos confiar que os comandos no VIM serão eficazes?

ATUALIZANDO

Acabei de encontrar meu erro, o case do "K" do kerberos após o sustenido está diferente do que eu pedi no comando. Para solucionar alguma situação semelhante a essa no futuro, existe dentro do VI, algum parametro semelhante ao (-i) do grep, para ignorar letras maiusculas e minusculas?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software