Both riders started from the front row but were slow to get away meaning Valentino Rossi was in the lead on his 400th GP start while Cal Crutchlow and Andrea Iannone made an unusual top three behind the Yamaha rider.
Fabio Quartararo’s attempts at a maiden MotoGP win ended after just two corners when he went too far in the Southern Loop and was in just the wrong spot to be hit by towering Danilo Petrucci behind him.
Rossi’s lead lasted three laps before Crutchlow took over and the Yamaha man lost several positions in quick succession, falling to seventh place.
Iannone put his Aprilia ahead with a pull at Turn 10, but Crutchlow slipstreamed past him on the main straight.
The Briton consolidated his lead for the next few laps while Iannone dueled Marquez before Vinales recovered from a slow start, passing both in quick succession and also passing Crutchlow on Lap 10 at Turn 4.
To stay with Vinales, Marquez charged past Crutchlow at Lukey Heights, and the first two quickly pulled away from the rest, the duo in a class of their own.
Marquez shadowed Vinales for the remaining 17 laps of the race, the gap between the duo being less than a tenth the last seven times they crossed the finish line, but the Honda rider waited until the last lap to make his move.
He slipstreamed Vinales down the main straight and held Vinales off at Turn 4 where the Yamaha man had passed Crutchlow.
Vinales planned a move for Turn 10, where his earlier move on Marquez took place, but he crashed leaving Lukey Heights and Marquez took the checkered flag alone.
He clinched his 11th win of the season and his fifth straight, passing 500cc legend Mick Doohan to become Honda’s most successful premier class rider in terms of wins.
Crutchlow inherited second place to set a Honda 1-2, his best result of 2019, 11.4 seconds behind Marquez.
Vinales’ fall gave Jack Miller a podium finish on home soil as he beat his Pramac teammate Francesco Bagnaia by half a tenth.
Bagnaia celebrated the best result of his rookie season, as did rookie colleague Joan Mir behind him.
Iannone faded from his early race heroics but still secured sixth place, beating Andrea Dovizioso’s Ducati by just 0.014s while Rossi finished eighth.
Alex Rins was a disappointing ninth, although he was fourth at times while the top 10 was completed by Aleix Espargaro’s second Aprilia.
Johann Zarco was 13th on his debut with LCR Honda while Jorge Lorenzo was dead last in 16th, over a minute behind Marquez.
Tito Rabat and Mika Kallio both failed to finish the race.