Sri Lanka trail Zimbabwe by 63 runs in their first innings after the touring side were all out for 356, having resumed the second morning on 344 for eight.
Sri Lanka's spin spearhead Rangana Herath added to his overnight haul of four wickets to pick up five for 116, his 30th five-wicket haul in Tests.
Craig Ervine could add only nine runs to his overnight score of unbeaten 151 before he was the last man out for Zimbabwe.
Sri Lanka opener Upul Tharanga hit a fluent 71 before he was run out while backing up too far at the non-striker's end. Tharanga and fellow opener Dimuth Karunaratne compiled an opening stand of 84 for Sri Lanka.
Leading Sri Lanka for the first time in Tests, Dinesh Chandimal scored 55 and added 96 for the fourth wicket with former skipper Angelo Mathews, who made 41.