Captain Graeme Cremer scored his maiden Test century to help Zimbabwe avoid the follow-on as they scored 373 in reply to Sri Lanka's 537 in Harare.
Sri Lanka closed the third day at 0-5 in their second innings, a 169-run overall lead in the first Test.
Cremer's ton received an ecstatic reception from the small crowd as Zimbabwe showed determination that had been missing through six successive Test defeats going into the two-match series against the in-form but injury-hit Sri Lankans.
Zimbabwe's lower-order rally was inspired by their captain, whose previous highest Test score was 43 against Bangladesh three years ago.
Cremer shared a 132-run partnership for the seventh wicket with wicketkeeper Peter Moor, playing only his second Test, and another 92-run stand with Donald Tiripano for the eighth wicket.
The 30-year-old Cremer was 102 not out off 207 balls.
Moor fell for 79, fending off a bouncer to hand teenage debutant Lahiru Kumara his first test wicket.
Tiripano (46) was trapped lbw by Kusal Mendes, usually a wicketkeeper and bowling only his second over in test cricket.

