Talvez você possa usar uma variável intermediária como essa
:%s/Tom/XX9G235a65/g :%s/Jerry/Tom/g :%s/XX9G235a65/Jerry/g
Supondo que eu tenha um arquivo contendo apenas caracteres e números (sem caracteres especiais ou sinais de pontuação), como posso trocar duas palavras que podem ou não estar ao lado uma da outra usando o VIM?
Eu tentei o seguinte (trocar todas as ocorrências de "Tom" com "Jerry"), mas não funciona por razões óbvias.
:% s / Tom / Jerry / g :% s / Jerry / Tom / g
Obrigado!
Aqui estão duas variantes (ambas usando :help sub-replace-expression
e igualmente incômodas) que usam um operador condicional e uma pesquisa de dicionário, respectivamente:
:substitute/\<\(Tom\|Jerry\)\>/\=submatch(0) ==# 'Tom' ? 'Jerry' : 'Tom'/g
:substitute/\<\(Tom\|Jerry\)\>/\={'Tom':'Jerry', 'Jerry':'Tom'}[submatch(0)]/g
Com isso, você não precisa de um intermediário como na resposta do @ MichaelDurrant.