Suranga Lakmal struck four times for Sri Lanka as Zimbabwe struggled to save the first Test in Harare on Thursday.
Zimbabwe added just 32 runs in 29 overs in the afternoon session and by tea on the final day had crawled to 152 for six in their second innings, still needing five more runs to make Sri Lanka bat again.
Lakmal picked up all three wickets in the morning session as Zimbabwe suffered a mini-collapse and then broke a stubborn fourth wicket partnership of 79 when he removed Brendan Taylor, caught at mid-on for 38, in the second over after lunch.
Zimbabwe had come out after lunch in a relatively secure position trailing by just 37 with seven wickets in hand and the fourth wicket pair of Sean Williams and Taylor well set.
Both, however, were dismissed in the first eight balls after lunch with Kasun Rajitha prompting Williams to feather a catch to Niroshan Dickwella behind the stumps.
The keeper then produced a smart stumping to remove Sikander Raza off some probing left-arm spin from Lasith Embuldeniya.
More From This Section
The 32-year-old Lakmal had rocked the home side with three wickets in his first three overs of the day as Zimbabwe, needing 157 to make Sri Lanka bat again, crumbled to 41 for three.
In his first over, the second of the day, with Zimbabwe resuming on 30 without loss, Lakmal found some extra bounce to find the edge of Prince Masvaure's bat which carried through to wicketkeeper Niroshan Dickwella.
In his next two overs he had the other opener Brian Mudzinganyama, who had been drafted in for the concussed Kevin Kasuza, leg before and Craig Ervine, who made 85 in the first innings, caught at short leg.
Three wickets had fallen for eight runs and Zimbabwe were sinking before Williams and Taylor temporarily steadied the ship.