você está aqui: Home  → Arquivo de Mensagens Programe sua mente para aprender inglês - ebook gratuito

Mais dicas de vi

Colaboração: Fernando M. Roxo da Motta

Data de Publicação: 24 de Outubro de 2003

Quando se usar:

:s/.../.../[g][c]

Estas / são delimitadoras de campo. Os campos são os alvos (a primeira parte) e o destino (a segunda parte, como fica fácil depreender;)). Se por um acaso o delimitador aparece em qualquer das partes ele terá que ser marcado ("escapado", filtrado) como um não delimitador. Por isto no exemplo acima apareceu o tal "GNU\/Linux". Só que esta história pode tornar muito complicada a leitura dos padrões, aumentando a probabilidade de erro. Por exemplo:

:s/\/usr\/tmp/\/var\/lib\/lixo/g

E aí, o que está sendo trocado pelo quê? Complicado, né?

Bem, a melhor maneira de resolver este embróglio é lembrar que embora normalmente se use a / como delimitador, vários outros caracteres podem ter esta função. Por exemplo, se usarmos o # como delimitador acima teremos:

:s#/usr/tmp#/var/lib/lixo#g

Que torna muito mais fácil a leitura do comando, certo? Logo o exemplo lá de cima poderia ficar:

:s#Linux#GNU/Linux#g

Que torna claro o comando a ser executado.

E se usando o # como delimitador aparecer um # no padrão:

:s#/usr/tmp#/var/tmp/usr##

Oops !! Não, para funcionar a lógica é a mesma anterior:

:s#/usr/tmp#/var/tmp/usr\##

Ainda fica mais legível um único "escape" (a \ ) aplicado a um # que aplicar naquele monte de /, certo? Mas ainda pode ficar muito melhor:

:s@/usr/tmp@/var/tmp/usr#@

ou

:s+/usr/tmp+/var/tmp/usr#+

Resumindo, existem vários delimitadores possíveis, use aquele que melhor se acerte com os padrões necessários para pesquisa e substituição.



Veja a relação completa dos artigos de Fernando M. Roxo da Motta