Grupos de captura :help /\( permitem que você armazene o que é correspondido pelo padrão dentro %código%; você pode referenciar a correspondência (via \(...\) para o primeiro grupo, , e assim por diante) na substituição (ou mesmo depois no próprio padrão).
Uma abordagem (há muitas) para o seu problema é capturar o nome do arquivo antes da extensão . Na substituição, coloque a captura ( .tar.gz ), um espaço e, em seguida, o texto original ( ou ): &
:%substitute/\(.*\)\.tar\.gz$/ &/
Como alternativa, você pode apenas combinar as coisas antes da extensão (terminar a correspondência com \ze ) e depois duplicar isso:
:%substitute/.*\ze\.tar\.gz$/& &/
Problemas com sua tentativa
- Você usou a referência de referência
, mas nunca capturou nada. - O
[a-z_-]não corresponde a um literal., mas isso aparece no seu exemplo. - Não há escape do% final% co_de (como
.); corresponderia a qualquer personagem. - Nenhuma duplicação na peça de substituição; você efetivamente removeu o texto em vez de adicionar.