Chamu Chibhabha's unbeaten 48 lifted Zimbabwe beyond 200 after good work earlier by Vusi Sibanda (41) and Brendan Taylor (39). Veerasammy Permaul took three for 40.
But Darren Bravo made 72 not out as the hosts sealed victory with almost four overs to spare.
Zimbabwe openers Tino Mawoyo and Sibanda put on 23 in nine overs before Sunil Narine struck with his first ball for the second match in succession, trapping Mawoyo lbw for nine with the aid of DRS. Hamilton Masakadza hammered the first boundary of the innings but made just six before Dwayne Bravo knocked out his middle stump.
Sibanda stepped up a gear, hitting three fours and a mighty six - but after Taylor also began to find the boundaries, their partnership was ended at 55 as Sibanda chipped Tino Best to mid-off. Taylor hit Narsingh Deonarine's first ball for six but sliced Permaul to extra cover to end a promising run-a-ball innings.
Another lbw review, from Permaul, accounted for Max Waller (15) the ball after his second boundary and Regis Chakabva missed a swing across the line to give Permaul his third wicket. Tinotenda Mutombodzi hit Narine for four and six but was superbly run out by Dwayne Bravo, who then bowled Natsai Mushangwe.
Chibhabha had made a quiet start to his innings but hit Roach for four and upped the scoring rate by picking off ones and twos. He added two more fours and two sixes, the second off the last ball of the innings, in a well-judged 62-ball innings to give his side hope.
Zimbabwe's bowlers made a solid start but Kieran Powell took back-to-back boundaries off Kyle Jarvis in the ninth over. Ramnaresh Sarwan, after a pedestrian 19 from 41 balls, chipped a simple return catch to give Mutombodzi his first international wicket with only his third ball.
Powell and Darren Bravo pressed on in a largely comfortable stand before the former, who made 42 from 52 balls, lofted Mutombodzi straight to Waller at long-on. Deonarine made 21 before he and Kieron Pollard fell in three balls, the latter run out without facing to leave the Windies 121 for four.
But the Bravo half-brothers put on 46 in 7.2 overs, Dwayne contributing 26 from 23 balls with a four and a six before he holed out off Jarvis. Darren Bravo had brought up a 78-ball half-century in the previous over and though he should have been run out when he lazily strolled the single that brought the scores level, he and Denesh Ramdin (24no) saw their side home.