Sri Lanka was 122-2 in reply to Zimbabwe's 406 when bad light stopped play on the second day of the second test on Tuesday.
Zimbabwe resumed at Harare Sports Club from 352-6 overnight, but was able to add only 54 runs on a pitch that has proved more suited for batting. Zimbabwe posted its highest test total in more than eight years.
Sri Lanka left-arm spinner Lasith Embuldeniya cleaned up the Zimbabwe tail before the lunch break, taking all but one of the remaining wickets to record personal figures of 4-182 at more than four per over.
Embuldeniya removed Zimbabwe wicketkeeper Regis Chakabva (31), allrounder Donald Tiripano (13), and last man Victor Nyauchi (1). Test debutant Tino Mutombodzi was dismissed by another slow bowler, Dhananjaya de Silva, for 33.
"The wicket is a bit slow, and there is some turn," Embuldeniya said. "The wicket will get even slower in the next two days, and definitely more turn."
In response, steady accumulators Dimuth Karunaratne and Oshada Fernando combined for an opening stand of 94 in 37 overs. Both scored 44 when before Zimbabwe offspinner Sikandar Raza bowled full and straight and trapped Karunaratne lbw. The captain had been at the crease for nearly 2 1/2 hours.
Fernando edged behind Tiripano to a diving Chakabva.
Raza said the host side was pleased with the progress so far.
"We've gone in with a positive attitude," Raza said, "and 406 for the first innings is a positive result.
"We would have wanted to have two more wickets on that scoreboard, but having said that, they haven't really run away from us in terms of the run rate."
At the close of play, Kusal Mendis was dropped on 1 by Chakabva off the bowling of Raza to be 19 not out, while captain Angelo Mathews was 4 not out after facing 37 balls.