Starting on 239 for no loss after the second day's play was lost due to rain, India moved on cautiously with Vijay (144 not out), who started the day on 89, reaching his sixth Test ton in the eighth over of the day but the Shakib Al Hasan-led spin attack had other ideas.
With play starting half-an-hour early to cover up for lost time, Shakib (2-78) struck with his left-arm spin to send Shikhar Dhawan (173) back to the pavilion in the 68th over of the innings.
The 283-run opening stand though fell 6 runs short of the record first-wicket partnership (289) between the duo in Mohali against Australia in March 2013, which was Dhawan's debut.
New-man Rohit Sharma (6) could not even settle in as Shakib spun another wicket for his side on a track that is looking spin-friendly on the third day.
More From This Section
Looking to drive a length ball, Rohit could only see his off stump cart-wheeling much to the delight of the Bangladeshi players.
Leg-spinner Jubair Hossain (1-85) then broke through in the 75th over to get the prized wicket of Kohli.
The Khan Shaheb Osman Ali Stadium exploded when Jubair delivered the googly spot on as a driving Kohli got an inside edge on to his pads and the ball rolled on to the stumps.
The Mushfiqur Rahim-led Bangladesh continued with the old ball even after the 80th over as spinners tried hard to fetch another wicket.
The visitors did lose a wicket after reaching the 300-run mark in the 74th over but the final hour of play helped them up the scoring rate.