Third on grid
Marquez took the holeshot from third on the grid, with Franco Morbidelli just getting the jump on rookie, polesitter Fabio Quartararo to slot into second.
But it was tight, with Ducati's Andrea Dovizioso initially threatening for P2 but then getting shuffled back to fifth behind Vinales. Rins made progress as well, immediately moving up from his P9 on the grid.
Rins on the move
Quartararo was left dejected on the way back to pitlane with a mechanical problem. That left Morbidelli in second and Rins in third after slicing past Vinales - with Dovizioso and Petrucci giving chase.
Morbidelli then began sliding backwards down the order, however, as Rins got past before Vinales, Dovizioso and Petrucci were able to follow suit.
And the Suzuki of Rins then started cutting into Marquez' lead before settling for second place.
The fight for third became a duel between Vinales and Dovizioso, and the Italian was close throughout the final lap looking for a way through - but the Spaniard held firm.
Under pressure throughout, he took his first podium of the season after some difficulties with the start in recent races.
Marquez fought off the challenge and crossed the line in clear air for an impressive answer to his critics after the Circuit of The Americas (COTA) crash and understandably the local hero's celebrations went wild.
As the MotoGP caravan moves to Le Mans, France, for the fifth round of the season on May 19, it is Marquez who has made amends for his COTA crash and taken back the FIM MotoGP World Championship lead - by a single point.