Du Plessis said batting first on a well-grassed pitch was a "tricky decision" and his side's start must have reinforced his misgivings. Bhuvneshwar, who has produced some handy knocks across formats in recent times in lower order, looked more assured than some of the top-order batsmen while Pandya showed he was ready for scrap.
Dean Elgar, South Africa's leading batsman during 2017, edged the third ball of the match to be caught behind by Wriddhiman Saha for nought.
South Africa were reeling at 12/3 in 4.5 overs when De Villiers made a decision to counter attack Bhuvneshwar.
Just as the Proteas had recovered from losing three wickets in nearly no time at all, De Villiers was clean bowled by debutant Jasprit Bumrah for 65, which came off 84 balls and included 11 boundaries.
Fall of wickets: 1-16 (Vijay, 4.4 overs), 2-18 (Dhawan, 5.2), 3-27 (Kohli, 8.1), 4-57 (Rohit, 28.2), 5-76 (Pujara, 36.1), 6-81 (Ashwin, 38.5), 7-92 (Saha, 41.4), 8-191 (Bhuvneshwar, 66.5), 9-199 (Pandya, 69.1).
Du Plessis soon followed but a 40-ball 43 from Quinton de Kock, in which he found the rope seven times, and useful contributions from Philander (23), Keshav Maharaj (35) and Kagiso Rabada (26) pushed South Africa to a total nearing respectability.
Bhuvneshwar, who finished with 4/87, too agreed that De Villiers took the game away from India.
The 34-year-old paceman, regarded as one of the game's great fast bowlers, has been plagued by problems with that shoulder and only played eight Tests in three years before his return this week.
De Villiers and Du Plessis put on 114 for the fourth wicket, with De Villiers in sparkling form as he hit 65 off 84 balls with 11 fours. The Baroda player made most of the "life" as he forged a 99-run stand for the eighth wicket with a tenacious Bhuvneshwar, who played 33 balls before opening his account, for company.
In reply, India were reduced to 28/3 at stumps.
But India's hopes of earning a first-innings lead were dented as Murali Vijay (1) fell to Vernon Philander and Shikhar Dhawan (16) was caught and bowled by Steyn as the quick finally resumed a Test career derailed by injury. Cheteshwar Pujara (5) and Rohit Sharma (0) were at the crease and have a big responsibility of bailing the team out on Saturday.