Vi recentemente um comando substituto em que o autor foi /
substituído por um !
como este::s!abc!ABC!g
Tentei encontrar alguma documentação sobre esse uso, mas não encontrei nada relevante. Então, tentei experimentar sozinho e mais uma vez não consegui descobrir a diferença real entre os dois sinais. Aqui está o que eu encontrei:
- Não é possível misturar
!
e/
em um comando. Por exemplo,:s!abc/ABC
falha. - Pode ser útil usar
!
para evitar escapar de/
um padrão. Por exemplo, se eu quiser substituir</
por%
, posso usar em:%s!</!%!g
vez de:%s/<\//%/g
. - Parece que, em alguns casos, algum regex não funcionará
/
e funcionará corretamente,!
mas como eu não sou um especialista em regex, não tenho certeza disso.
Portanto, minha pergunta é simples: qual é a vantagem de usar !
em um comando substituto e quando devo decidir usá-lo em vez de /
?
substitute
statox
fonte
fonte
Respostas:
De
:help :global
:Como você já planejou com suas experiências, isso é para evitar a chamada " síndrome do palito de dente inclinado ". Considere isto:
versus:
A segunda forma é obviamente muito mais legível.
Essa é a única razão pela qual você pode alterar o delimitador; para torná-lo mais legível para nós, seres humanos. O computador não se importa.
Alguns outros programas são ainda mais flexíveis, a propósito, no GNU,
sed
por exemplo, você pode usarx
como delimitador, se desejar.sed sxaxbxg file
é o mesmo quesed s/a/b/g file
.fonte
:%s@/home/martin/test@/home/jake/x@
, pois a "gordura"@
torna ainda mais fácil ver onde as partes individuais da declaração começam / terminam.:%s#/home/martin/test#/home/jake/x#
trabalhos ainda melhores, mas isso é apenas opinião pessoal.