The Avintia FTR-Honda rider started from pole, and was always in the mix during a frenetic first half of the race, which saw nine bikes vying for the lead.
With six laps to go the race boiled down to a three-way fight between Vinales, Luis Salom (RW Kalex-KTM) and Sandro Cortese (Ajo KTM), with all three taking their turn at the front in the closing laps. On the final tour Vinales put his head down, charging past Salom into the first corner and edging clear for the win.
Salom might have been leading as the final lap started, but he was soon dropped back to third by Cortese. An ambitious move into Vale proved crucial, Salom stealing second place while Cortese was forced to settle for third.
Behind the leading trio, the fight for third was just as close. Louis Rossi (Team Germany FTR-Honda) looked set to take the position, but crashed heading into Vale on the last lap.
That opened the door for Alexis Masbou, who starred in the early part of the race aboard the unfancied Caretta Honda, to take a fine fourth, from Efren Vazquez (Laglisse Honda), Brit Danny Kent (Ajo KTM) and Romano Fenati (Italia FMI FTR-Honda).
The Ajo KTM pair of Arthur Sissis and Zulfhami Khairuddin staged a tough battle for eighth, the Australian eventually winning out, while Miguel Oliveria finished a very lonely 10th on the Monlau Honda.