Why is the Bloc so uncompetitive in Montreal proper? I know a lot of the ridings there are English speaking, but it seems odd they cant win more than a single riding there.
The Bloc has never done especially well in Montreal because a large portion of the island will not vote for a pro-independence party under any circumstances, but Gilles Duceppe represented a Montreal riding and under him the Bloc did much better on the island than it does now. This is because the Bloc under Duceppe emphasized that it was a social democratic party. Nowadays the Bloc is focused on winning the votes of supporters of François Legault, meaning that it focuses on cultural grievances. Naturally this has little appeal in the city. In Duceppe's old riding, Laurier—Sainte-Marie, the Bloc finished in a distant third place with 20%; NDP candidate Nimâ Machouf didn't win, but she's clearly captured a substantial portion of the old Bloc vote.
The NDP seems to have succeeded in a limited sense in Montreal; after all the churn of the last decade, its position in Montreal is at least as strong as in Toronto. Alexandre Boulerice's seat is safe enough and there's obvious and readily identifiable room to grow, which the NDP certainly didn't have in Quebec twenty years ago. Aside from the special case of Berthier—Maskinongé, the NDP vote across the province has held up in the sort of places you'd expect; in Sherbrooke, for instance, despite running a new candidate against the Liberal incumbent and a Bloc star candidate, the NDP managed 14% and third place. That's not exactly a good number, but it's indicative of the sort of people that are voting NDP in Quebec at this point.
On top of this excellent post, I'll just add that demographic trends aren't helping the Bloc very much on Montreal Island: over a decade between 2006 and 2016, the Francophone population declined from 48.8% to 46.4%, and over two decades between 1996 and 2016, it declined from 52.3% to 46.4%. The visible minority has increased from 18.7% in 1996, to 25% in 2006 and to 32.9% in the last census in 2016. The current population is undoubtedly even more diverse and less Francophone. Similar demographic changes also help explain why Laval is also becoming increasingly solidly Liberal, whereas in the past it would have elected more Bloc MPs. Considering that very few non-Francophones vote for the Bloc, it's obvious that these trends aren't helping.
The only Bloc riding now, and since 2015, is La Pointe-de-l'Île, which is a largely suburban seat and the most heavily Francophone (nearly 90%) on the island, and covering much of the area of the only two CAQ-held seats in Montreal (Bourget and Pointe-aux-Trembles). It has more in common demographically and politically with the off-island suburbs than it has with any other part of Montreal.