Harare: John Nyumbu became the second Zimbabwean to record a five-wicket haul on Test debut but South Africa still put themselves in the driving seat on day three of the one-off Test on Monday.
Nyumbu sank to his knees and pointed to the heavens after taking figures of five for 157 in a South African total of 397 all out, which gave the tourists a lead of 141 on first innings.
Morne Morkel then dismissed opener Hamilton Masakadza before Zimbabwe reached stumps on 28 for one in their second innings, still trailing by 113 runs.
Only fast bowler Andy Blignaut had taken five wickets on Test debut for Zimbabwe, but Nyumbu chipped away throughout the day to add the scalps of Faf du Plessis, Dale Steyn and JP Duminy to the two wickets he had picked up on Sunday.
Du Plessis was out for 98 shortly before the lunch interval after a 264-ball innings, ending a 119-run stand with Quinton de Kock for the fifth wicket. De Kock also missed out on a century when he chipped left-arm spinner Sean Williams to midwicket to depart for 81, having showed the most intent out of the South Africans.
His dismissal prompted extreme caution from the batsmen who followed, as JP Duminy and Vernon Philander added 42 runs in 27 overs before Philander was bowled by Williams on the stroke of tea.
"It was important for us to make sure we got as close to 400 as we could and the only way you could do that was to spend time in the middle," said Du Plessis.
Although South Africa lifted their scoring rate at the beginning of the final session, their overall run-rate of 2.5 per over was the slowest they had recorded in a first innings against Zimbabwe.
"It doesn't always have to look pretty. This is one of those specific situations where you do the work, you do the hard yards," Du Plessis said. "People don't see it as flashy and it doesn't look like the number one team in the world, but it's what we know we need to do."
Duminy added a further 63 with the tail after Philander's departure, but was last man out for 55 when he was caught at slip off Nyumbu. That left the Proteas with 13 overs to bowl at the hosts, and Morkel made the only impression when he bounced out Masakadza for 19.
Vusi Sibanda reached stumps unbeaten on eight, while nightwatchman Donald Tiripano had one.