Você pode usar a substituição especial \= , que permite executar vim code:
Por exemplo, para trocar foo e bar :
%s/foo\|bar/\=submatch(0) == "foo" ? "bar" : "foo"/g
Ou pelo seu exemplo:
%s/ca[rt]/\=submatch(0) == "car" ? "truck" : "dog"/g
Veja:
:h sub-replace-expression
para detalhes.