Sikandar Raza hit his maiden Test century on Monday to stretch Zimbabwe's second-innings lead over Sri Lanka to 350 runs, compounding the woes of the embattled hosts on day four.
The visitors took lunch at 340 for eight with skipper Graeme Cremer (35) batting alongside Donald Tiripano (eight) at Colombo's R Premadasa Stadium.
Overnight batsmen Malcolm Waller (68) and Raza, who started the day on 97, were the two wickets to fall in the morning session after Zimbabwe resumed the day on 252-6 in the one-off Test.
Raza was bowled for 127 after attempting an audacious reverse sweep off left-arm spinner Rangana Herath, who took his overall match tally to 10 with a five-for in each innings.
Waller was the first to go, falling to off-spinner Dilruwan Perera after adding just 11 runs to his overnight score. His wicket ended a 144-run seventh-wicket stand.
The Pakistan-born Raza put Zimbabwe on top after they were left tottering at 23-4 and 59-5 on the third day with Herath rattling the visitors' top-order.
Raza, 31, combined the right dose of caution and aggression to thwart the Sri Lankan bowling attack during his 205-ball stay laced with nine fours and a six.
All-rounder Cremer, who got his maiden five-wicket haul in the Sri Lankan innings, took over the batting charge from Raza to frustrate the opposition bowling with some quick runs.
While Zimbabwe eye their first-ever Test win against Sri Lanka, the hosts are looking for redemption under new Test captain Dinesh Chandimal after a shock loss in the one-day series.