Zimbabwe lost two early wickets but recovered to finish 126 for two at the close on the second day of the second Test on Monday in reply to Sri Lanka's first-innings total of 504.
Brian Chari and Craig Ervine were both 60 not out as Zimbabwe fought back after a poor start when they slumped to 17 for two but the hosts still trail by 378 runs.
Sri Lanka, who won a closely contested first Test last week, went from 290 for five overnight to being dismissed just before tea with Asela Gunaratne completing a maiden test century.
Dhanajaya de Silva was before caught and bowled by Zimbabwe skipper Graeme Cremer for 127.
Gunaratne, playing his second Test, made 116 and was the last man out.
He was on 91 when the ninth wicket went down and had to watch as No. 11 Lahiru Kumara fended off the Zimbabwe bowlers before reclaiming the strike and moving to three figures.
Sri Lanka’s stand-in captain Rangana Herath took the wickets of Tino Mawoyo and Hamilton Masakadza in the same over as Zimbabwe’s openers again failed to get their team off to a solid start.