The Red Bull junior started third, but took the lead on lap 11, before finishing seven tenths clear of second place Charouz Racing System’s David Beckmann, who had started on pole.
Carlin’s Jehan Daruvala finished third after starting seventh, while polesitter Trident’s Bent Viscaal finished fourth.
The chaotic race, which was the 100th of F2’s modern era, saw two safety cars and six cars did not finish after multiple collisions.
Star performances came from Hitech Grand Prix’s Liam Lawson, who finished in seventh having started 20th, and Carlin’s Dan Ticktum, who made his way back up to sixth despite starting the second lap in last place.
Prema Racing’s Oscar Piastri also managed to finish eighth – the last points position – after starting 19th.
The new format, which reverses the top ten finishers of Saturday morning’s sprint race, meant Viscaal started on pole, with Beckmann in second and Vips in third.