MIAMI -- Angry after giving up a run, Dontrelle Willis shouted at the plate umpire as he walked off the mound. One inning later, he threw a celebratory roundhouse punch as he skipped to the dugout.
And when Miguel Cabrera delivered the tiebreaking hit, Willis leaped off the bench to lead the cheers.
The Marlins were widely projected to lose 100 games this season, but their latest victory left them only four games behind NL wild-card leader Cincinnati and Arizona. Florida won two of three games from the NL East-leading Mets.
"If we can win every series, that's big. We have to gain ground," Willis said. "But we're not talking about the wild card. We're just talking about winning."
Cabrera's three-run double broke a tie with two outs in the eighth inning, giving Willis (7-8) his first victory since July 7. The left-hander retired the side in order only once but limited New York to an unearned run in eight innings.
Florida's Mike Jacobs broke a scoreless tie with a two-out homer in the sixth, his 15th.
"This series has probably had the most emotion for us this year," Jacobs said. "We're playing the first-place team in our division; we definitely feel like we can play with anybody in this league."
Cabrera then pulled a pitch into the left field corner, and all three runners scored. Jacobs was safe at the plate when he kicked the ball out of catcher Paul Lo Duca's glove.
"I had to get the hit for Dontrelle, because he pitched a great game," Cabrera said.
Heilman was pitching for the third straight night since setup man Duaner Sanchez suffered a season-ending shoulder injury in a taxi accident Sunday.
"I thought I made a pretty good pitch to Cabrera," Heilman said. "You try to put it behind you as quick as possible and move on."
The crowd of 24,097 again included plenty of transplanted New Yorkers who frequently chanted "Let's go, Mets!" But the Marlins, accustomed to skimpy crowds, didn't mind.
"It's just neat to see the stands filled up," Jacobs said.
While the Mets bring out big crowds in Miami, they also bring out the best in Willis, who improved to 10-2 against them. He allowed seven hits and three walks but was helped by three double plays.
He showed a rare flash of anger in the seventh after allowing the Mets' only run. Willis thought he had Julio Franco struck out on consecutive pitches before giving up the single, and after the inning he argued at length with umpire Mike Reilly.
"It's the first time all year I've seen him upset like that. And that's OK," Marlins manager Joe Girardi said.
"He has a lot of energy. He brings a great presence and a lot of excitement to the ballpark. He uses his emotion to his benefit sometimes. And I thought that's as good a game as he has pitched all year."
Joe Borowski pitched a perfect ninth for his 22nd save in 25 chances.
Martinez, making his second start after missing a month with an inflamed right hip, pitched six innings before he departed for a pinch hitter trailing 1-0. He gave up four hits, walked none, struck out nine and threw 100 pitches.
He regretted only the cutter he threw down the middle to Jacobs.
"I guess God made life simple and easy for us, and we complicate it ourselves by making mistakes," Martinez said. "I felt pretty good. I'm just trying to get back on track and give myself some stamina."
New York's run came in the seventh. Franco, pinch hitting for Martinez, hit a one-hop single that handcuffed right fielder Jeremy Hermida, who let the ball get past him for an error. Franco continued to third and scored on Jose Reyes' groundout.
But for the most part, Willis was helped by his defense. New York had runners at the corners with one out in the fourth and fifth innings, and nifty glove work rescued the left-hander both times.
In the fourth, Cabrera made a nice pickup at third base to start an inning-ending double play, and second baseman Dan Uggla did the same in the fifth with a diving stop.
"Our double plays probably saved two runs," Girardi said.
- Willis won his only previous matchup against Martinez last September.
- Martinez is 17 strikeouts shy of 3,000.
- Mets 3B David Wright was 4-for-23 on their trip before he singled in successive at-bats.