Vitori took five for 61 as Pakistan collapsed to 230 all out, losing their last six wickets for 19 runs.
Zimbabwe were 30 for one in their second innings at tea, an overall lead of 94.
Pakistan were well-placed to overhaul Zimbabwe's total of 294 until Asad Shafiq was fifth man out shortly before lunch, bowled by Tendai Chatara with the total on 211.
Abdur Rehman was leg before wicket to Panyangara off the next ball and Vitori ripped out the last three batsmen to give Zimbabwe an important lead on a cracked pitch on which batsmen have struggled to score freely.
Also Read
Only 48 runs were scored in 28 overs during the morning's play for the loss of two wickets, while six further wickets fell while 49 runs were scored in 22.5 overs between lunch and tea.
Shafiq was bowled by Chatara for 10 in what was virtually an action replay of his dismissal in the second innings of the first Test, not getting forward to a fairly full delivery which swung in.
Stand-in opening batsman Prosper Utseya was caught at midwicket off Rahat Ali for five when Zimbabwe batted again. Regular opener Vusi Sibanda was ill.