Italian seven-time champion Rossi, who led the standings before the race, was in second place before he crashed on the last lap as he battled Vinales.
French rookie Johann Zarco took his first podium finish with second place for the Tech 3 Yamaha team.
Honda's Dani Pedrosa was third.
The Spaniard's compatriot, team-mate and reigning MotoGP champion Marc Marquez, crashed on lap 18, while Britain's Cal Crutchlow was fifth.
1.  Maverick Vinales (Spa) Yamaha  43 minutes 29.793 seconds
2.  Johann Zarco (Fra) Yamaha    +3.134
3.  Dani Pedrosa (Spa) Honda      +7.717
4.  Andrea Dovizioso (Ita) Ducati  +11.223
5.  Cal Crutchlow (GB) Honda    +13.519
6.  Jorge Lorenzo (Spa) Ducati     +24.002
7.  Jonas Folger (Ger) Yamaha   +25.733
8.  Jack Miller (Aus) Honda    +32.603
9.  Loris Baz (Fra) Ducati        +45.784
10. Andrea Iannone (Ita) Suzuki    +48.332
1. Maverick Vinales (Spa) Yamaha  85
2.  Dani Pedrosa (Spa) Honda       68
3.  Valentino Rossi (Ita) Yamaha   62
4.  Marc Marquez (Spa) Honda       58
5.  Johann Zarco (Fra) Yamaha     55
6.  Andrea Dovizioso (Ita) Ducati  54
7.  Cal Crutchlow (GB) Honda    40
8.  Jorge Lorenzo (Spa) Ducati     38
9.  Jonas Folger (Ger) Yamaha    38
10. Jack Miller (Aus) Honda    29
Spain's Maverick Vinales held off the challenge of Yamaha team-mate Valentino Rossi to win the French Grand Prix and take the lead in the MotoGP world championship.