Off-spinner Sikandar Raza took a career best 7-113 on Wednesday to help Zimbabwe bowl out Sri Lanka for 293 runs in its first innings to leave the host in a strong position to level the two-match series.
The 33-year-old all-rounder's seven-wicket haul on the third day of the test came after Zimbabwe totaled 406 while batting first. The hosts had a lead 175 runs after rain forced an early end of play with Zimbabwe on 62-1 in the second innings.
After giving Zimbabwe the breakthrough on Tuesday with the wicket of Sri Lanka captain and opener Dimuth Karunaratne, Raza claimed the scalps of Kusal Mendis, Dinesh Chandimal, Dhananjaya de Silva, Niroshan Dickwella, Suranga Lakmal and Lasith Embuldeniya.
It wast the second-best haul by a Zimbabwe bowler in test cricket.
"I think we couldn't have asked for a better day," Raza told reporters. "It's one of my best days of test cricket. To be 175 runs ahead with nine wickets in hand, as a country and as a team, we should be happy where we are."
Zimbabwe batsman Kevin Kasuza has been ruled out of the remainder of the test match due to a concussion and was replaced by Timycen Maruma after the opener was struck on the helmet while fielding.
The change saw Craig Ervine move up the order to open for Zimbabwe, with the left-hander nicking behind to wicketkeeper Dickwella off pacer Vishwa Fernando for 13 in to be the only wicket to fall in the second innings.
"The wicket is getting slower now, we need to take wickets earlier otherwise it becomes difficult to chase," Fernando said.
Prince Masvaure was 26 not out while Regis Chakabva was unbeaten on 14 when rain stopped play.