Tour de France title as the Dane retained his overall lead after avoiding a freak crash in the final time trial on Saturday.
The 25-year-old Jumbo-Visma rider finished second in the 20th stage, a 40.7-km solo effort from Lacapelle-Marival won by his Belgian team mate Wout van Aert, who clocked a best time of 47 minutes 59 seconds.
There was a heart-in-mouth moment, though, when Vingegaard nearly crashed into rocks after overcooking a turn on a descent before finishing 19 seconds behind Van Aert with defending champion Tadej Pogacar taking third place, 27 seconds off the pace.
Overall, Vingegaard leads Pogacar of Slovenia by 3:34 and Britain's Geraint Thomas by 8:13 ahead of Sunday's final stage, a largely processional ride from La Defense to the Champs Elysees in Paris.