Faits :
A.
Z._ SA est une société active dans le traitement et la récupération de papier et de tous déchets recyclables. Depuis le 1 er mai 2008, X._ travaillait en qualité d'ouvrier polyvalent à la succursale de... de cette entreprise. En février 2013, son salaire mensuel brut s'élevait à 4'150 fr.
Le matin du 7 juin 2013, une altercation a eu lieu sur le lieu de travail entre X._ et son collègue A._. Ce dernier a notamment fait tomber X._ et lui a donné des coups alors qu'il se trouvait à terre. Selon deux certificats médicaux établis les 7 et 27 juin 2013, X._ a subi une incapacité de travail totale jusqu'au 20 juin 2013.
Après avoir entendu les deux travailleurs ainsi que deux autres employés ayant assisté à la scène, l'employeur a, le matin même, licencié X._ et A._ avec effet immédiat pour des motifs identiques ainsi décrits dans les lettres de congé:
" Aux environs de 7.30 h, vous avez eu une altercation violente avec un de vos collègues de travail, laquelle a dégénéré en bagarre avec agression physique et verbale. "
Le 25 juin 2013, X._ a contesté la résiliation du contrat de travail avec effet immédiat, niant l'existence de justes motifs. L'employeur a refusé de revenir sur sa décision, soulignant qu'il ne pouvait en aucun cas tolérer la violence sur le lieu de travail.
Le 11 juillet 2013, X._ a déposé une plainte pénale contre A._. Par ordonnance pénale du 11 mars 2014, ce dernier a été reconnu coupable de lésions corporelles simples au sens de l'<ref-law> et condamné à 40 jours-amende à 50 fr., peine assortie du sursis pendant deux ans. L'ordonnance pénale relate les faits suivants:
" Le vendredi 7 juin 2013 vers 07h00, au sein de l'entreprise Z._ SA à..., le plaignant X._ et le prévenu A._, après s'être échangé quelques mots, se sont bousculés. A._ a alors poussé X._, qui est tombé à terre. Alors qu'il se trouvait au sol, le prévenu a encore donné des coups de pied et de poing dans les jambes, sur la poitrine, dans le dos et sur la tête du plaignant.
X._ a subi une plaie de 0.5 cm de longueur superficielle temporale gauche, des douleurs à la palpation antérieure du gril costal et du muscle trapèze gauche, une tuméfaction antérieure tibiale de 5 x 10 cm sans rougeur, avec des douleurs locales à la palpation ainsi qu'une légère douleur du tibia, sans déformation ni tuméfaction. "
Jusqu'au 30 juin 2014, X._ a perçu des indemnités journalières de la SUVA à hauteur de 80% de son salaire.
B.
Par demande du 25 novembre 2014, X._ a ouvert action contre Z._ SA en paiement de 4'131 fr.60 à titre d'indemnité pour les vacances non prises entre le 7 juin 2013 et le 28 février 2014, de prime annuelle et de salaire pendant les trois jours du délai d'attente de la SUVA, ainsi que de 17'983 fr.40 à titre d'indemnité pour licenciement immédiat injustifié. Il a par ailleurs conclu à la délivrance d'un certificat de travail; ce point fera l'objet d'une transaction devant l'autorité de première instance.
Par jugement du 8 avril 2015, le Tribunal de prud'hommes de l'arrondissement de La Broye et du Nord vaudois a rejeté les conclusions en paiement du demandeur.
X._ a interjeté appel. Par arrêt du 28 octobre 2015 dont les considérants ont été notifiés le 10 février 2016, la Cour d'appel civile du Tribunal cantonal vaudois a admis partiellement l'appel et réformé le jugement attaqué en ce sens que Z._ SA est condamnée à verser à X._ les montants de 602 fr.45 brut et 4'150 fr. net, le tout plus intérêts à 5% dès le 8 juin 2013. Contrairement au Tribunal de prud'hommes, la cour cantonale a reconnu le caractère injustifié du licenciement immédiat; elle a retenu que l'employeur n'avait pas démontré que le travailleur s'était battu avec A._, aucun élément ne laissant apparaître qu'il aurait porté des coups à son collègue. S'agissant des conséquences financières de la résiliation du contrat sans justes motifs, l'autorité précédente a fixé à 602 fr.45 le montant dû en indemnisation des vacances non prises jusqu'au 3 février 2014 et à 4'150 fr. - correspondant à un mois de salaire brut - l'indemnité due en vertu de l'<ref-law>.
C.
X._ interjette un recours en matière civile. Il conclut à la réforme de l'arrêt attaqué en ce sens que Z._ SA est condamnée à lui payer 652 fr.70 en indemnisation des vacances non prises et 17'983 fr.40 à titre d'indemnité allouée sur la base de l'<ref-law>, le tout plus intérêts. A titre subsidiaire, il demande l'annulation de l'arrêt attaqué et le renvoi de la cause à l'autorité cantonale pour nouvelle instruction et nouveau jugement dans le sens des considérants.
Par ordonnance du 18 août 2016, la cour de céans a admis la demande d'assistance judiciaire présentée par X._ et a désigné Me Vincent Demierre comme avocat d'office du recourant.
Dans sa réponse, Z._ SA conclut au rejet du recours.

Considérant en droit :
1.
Le recours est dirigé contre une décision finale (<ref-law>) rendue en matière civile (<ref-law>) par un tribunal supérieur désigné comme autorité cantonale de dernière instance, lequel a statué sur recours (<ref-law>). La cause atteint la valeur litigieuse de 15'000 fr. ouvrant le recours en matière civile dans les affaires relevant du droit du travail (<ref-law>). Au surplus, le recours est exercé par la partie qui n'a pas obtenu entièrement gain de cause et qui a donc qualité pour recourir (<ref-law>); il a été déposé dans le délai (art. 45 al. 1 et art. 100 al. 1 LTF) et la forme (<ref-law>) prévus par la loi.
2.
Le recourant se plaint d'une violation de l'art. 329b ( recte : 329d) al. 1 et 2 CO. Il ne remet pas en cause la réduction de son droit aux vacances, fixé à 3,15 jours par la cour cantonale, mais reproche à celle-ci d'avoir pris en compte, lors de la rémunération de ces jours, un salaire journalier brut faisant abstraction du treizième salaire.
2.1. Fondé sur l'<ref-law>, le droit du recourant au paiement en espèces de 3,15 jours de vacances est reconnu.
Le salaire afférent aux vacances (<ref-law>) doit être calculé sur la base du salaire complet; en particulier, les indemnités versées à titre d'heures supplémentaires ou pour du travail effectué de nuit ou le dimanche seront prises en compte pour autant qu'elles revêtent un caractère régulier et durable (<ref-ruling> consid. 3 p. 109; <ref-ruling> consid. 3.1 p. 174). A la fin des rapports de travail, une éventuelle indemnité pour vacances non prises doit également être calculée sur la base du salaire complet, lequel comprend notamment le treizième salaire éventuellement convenu par les parties (WYLER/HEINZER, Droit du travail, 3e éd. 2014, p. 399 s.; STREIFF/VON KAENEL/RUDOLPH, Arbeitsvertrag, 7e éd. 2012, n° 3 p. 686; ERIC CEROTTINI, Le droit aux vacances - Étude des articles 329a à d CO, 2001, p. 197 s.).
2.2. Pour calculer l'indemnité correspondant à 3,15 jours de vacances, la cour cantonale est partie du salaire mensuel brut de février 2013 (4'150 fr.) qu'elle a divisé par 21,7 pour obtenir un salaire journalier (191 fr.25), multiplié ensuite par 3,15 (602 fr.45). Ce faisant, elle n'a pas tenu compte du treizième salaire, dont elle fait pourtant mention dans les faits au travers du décompte de salaire établi par l'employeur au 7 juin 2013. Par cette omission, l'autorité précédente a violé le droit fédéral. Le recours est fondé sur ce point et il convient de rectifier en conséquence le calcul de l'indemnité pour vacances non prises. Le montant à verser à ce titre par l'intimée s'élève à 652 fr.70 (4'150 x 13 = 53'950; 53'950 / 12 = 4495,85; 4495,85 / 21,7 = 207,20; 207,20 x 3,15 = 652,70).
3.
Le recourant reproche également à la cour cantonale une violation de l'<ref-law>. En fixant à 4'150 fr., correspondant à un mois de salaire brut, l'indemnité due en cas de résiliation immédiate injustifiée, les juges vaudois n'auraient, là non plus, pas tenu compte de la part du treizième salaire à englober dans le salaire mensuel. Par ailleurs, ils auraient omis de prendre en considération des circonstances déterminantes, telles la durée des rapports de travail, la qualité des prestations et le bon comportement de l'employé, ainsi que son état physique après l'agression. Invoquant l'<ref-law>, le recourant entend faire compléter l'état de fait sur ces deux derniers points: d'une part, il fait état d'un certificat de travail élogieux, datant du 7 mai 2010; d'autre part, il relève que les juges de première instance, contrairement à la cour cantonale, ont retenu que l'employé agressé s'était plaint de douleurs auprès de son supérieur et que l'arrêt attaqué ne contient pas la description de l'état de santé de l'intéressé figurant dans les deux certificats médicaux mentionnés.
S'agissant des fautes respectives des parties, le recourant conteste toute faute concomitante, que la cour cantonale aurait admise sur la base d'une appréciation arbitraire des preuves; il relève en revanche la gravité de la faute de l'intimée, qui, au lieu d'apporter soutien et protection au collaborateur agressé et blessé, lui a réservé le même traitement qu'à l'agresseur en le licenciant sur-le-champ.
3.1. L'<ref-law> prévoit qu'en cas de résiliation immédiate injustifiée, le juge peut allouer au travailleur une indemnité dont il fixera librement le montant, en tenant compte de toutes les circonstances, mais sans dépasser l'équivalent de six mois de salaire. Cette indemnité, qui s'ajoute aux droits découlant de l'<ref-law>, revêt une double finalité, à la fois réparatrice et punitive, quand bien même elle ne consiste pas en des dommages-intérêts au sens classique, car elle est due même si la victime ne subit ou ne prouve aucun dommage; revêtant un caractère sui generis, elle s'apparente à la peine conventionnelle (<ref-ruling> consid. 3.1 p. 407; <ref-ruling> consid. 9b p. 214). Sauf cas exceptionnel, elle doit être versée pour tout licenciement immédiat dénué de justes motifs (<ref-ruling> consid. 3.2 p. 660 et les arrêts cités).
L'indemnité est fixée d'après la gravité de la faute de l'employeur, la mesure de l'atteinte portée aux droits de la personnalité du travailleur et la manière dont la résiliation a été annoncée; d'autres critères tels que la durée des rapports de travail, l'âge du lésé, sa situation sociale, une éventuelle faute concomitante et les effets économiques du licenciement entrent aussi en considération (arrêts 4A_153/2016 du 27 septembre 2016 consid. 3.1; 4A_135/2013 du 6 juin 2013 consid. 3.2; 4A_218/2012 du 24 juillet 2012 consid. 2.2; 4A_660/2010 du 11 mars 2011 consid. 3.2). Statuant selon les règles du droit et de l'équité (<ref-law>), le juge dispose d'un large pouvoir d'appréciation; le Tribunal fédéral ne substitue qu'avec retenue sa propre appréciation à celle de la juridiction cantonale (arrêt précité du 27 septembre 2016 consid. 3.1).
3.2. En ce qui concerne les éléments permettant d'apprécier l'ampleur de l'indemnité à verser par l'intimée, il n'y a pas lieu de compléter l'état de fait sur lequel la cour cantonale s'est fondée. En effet, un certificat de travail établi trois ans avant l'épisode litigieux n'est pas susceptible d'établir une circonstance pertinente pour la fixation de l'indemnité due en vertu de l'<ref-law>. Quant aux lésions subies par le recourant, elles ressortent précisément de l'ordonnance pénale, dont l'état de fait est repris dans l'arrêt attaqué; les juges cantonaux ont retenu en outre que les deux certificats médicaux invoqués par le recourant font état d'une incapacité de travail totale jusqu'au 20 juin 2013.
Enfin, contrairement à ce que le recourant soutient, déterminer si le comportement qu'il a adopté le jour litigieux constitue une faute concomitante ne relève pas d'une appréciation des preuves, prétendument arbitraire, mais constitue une question de droit.
3.3. Pour fixer l'indemnité due sur la base de l'<ref-law>, la cour cantonale est partie du salaire brut mensuel versé avant la résiliation, sans y inclure une part du treizième salaire.
Dans l'arrêt 4A_234/2015 du 5 août 2015 invoqué par le recourant, le Tribunal fédéral relève qu'il est généralement admis que le salaire brut est déterminant lorsqu'il s'agit d'arrêter l'indemnité fondée sur l'<ref-law> (consid. 3.2). Mais cela ne signifie pas encore qu'une part du treizième salaire doit nécessairement y être incluse; il est possible en effet de se fonder sur le montant que le travailleur a gagné chaque mois avant le licenciement (même arrêt consid. 3.2 in fineet l'arrêt cité). Au demeurant, la loi n'impose pas de s'en tenir strictement à une quote-part de salaire (même arrêt consid. 3.3). Compte tenu du large pouvoir d'appréciation réservé au juge en la matière, le mode de procéder adopté par la cour cantonale ne prête dès lors pas le flanc à la critique.
3.4. La cour cantonale a limité à un mois de salaire l'indemnité due en vertu de l'<ref-law>. Dans son appréciation, elle n'a pas qualifié de grave la faute de l'employeur, lequel, en licenciant les deux protagonistes de l'incident du 7 juin 2013, avait cherché à prévenir d'autres disputes violentes dans un milieu multiculturel à risque de dérapages; elle a retenu par ailleurs une faute concomitante à la charge du recourant.
L'intimée a commis indéniablement une faute en licenciant sur-le-champ le recourant en raison d'une altercation ayant prétendument dégénéré en bagarre. En effet, elle ne disposait alors pas d'éléments suffisants pour retenir que le recourant s'était battu avec son collègue. Entendus le jour même, les deux témoins de la scène avaient déclaré que c'était A._ qui avait fait tomber à terre le recourant; de plus, ce dernier était blessé alors que rien n'indiquait que A._ avait subi une atteinte à son intégrité physique. Il n'en demeure pas moins qu'une altercation, qui s'est manifestée de part et d'autre par des cris et une bousculade, a bien opposé les deux protagonistes avant que le recourant soit poussé au sol et frappé. Or, en ayant une dispute verbale avec son collègue et en allant à son contact physique, le recourant a adopté un comportement répréhensible dont l'autorité précédente pouvait tenir compte au moment de fixer l'ampleur de l'indemnité fondée sur l'<ref-law>. Dans les circonstances de l'espèce, il n'apparaît pas que la cour cantonale ait abusé de son (large) pouvoir d'appréciation en allouant au recourant l'équivalent d'un mois de salaire à titre d'indemnité fondée sur l'<ref-law>.
4.
Dans un dernier grief, le recourant se plaint d'une violation de l'<ref-law>. Critiquant la compensation des dépens opérée par la cour cantonale, il fait valoir qu'il a gagné sur le principe du licenciement injustifié; quand bien même il n'a obtenu que le quart de ses conclusions chiffrées dans la procédure cantonale, il aurait dû se voir allouer des dépens, à verser par l'intimée.
4.1. Il convient de préciser d'emblée que la correction de 50 fr. sur l'indemnisation des vacances, admise par la cour de céans (consid. 2.2), ne commande pas, en elle-même, de modifier la décision de l'autorité précédente sur les dépens (cf. <ref-law>).
Selon les règles générales de répartition, les frais - soit les frais judiciaires et les dépens (<ref-law>) - sont mis à la charge de la partie qui succombe (<ref-law>); ils sont répartis selon le sort de la cause lorsqu'aucune des parties n'obtient entièrement gain de cause (<ref-law>). L'<ref-law> indique dans quels cas les frais peuvent être répartis en équité. Ainsi, le tribunal peut s'écarter des règles générales et répartir les frais selon sa libre appréciation lorsque le demandeur obtient gain de cause sur le principe de ses conclusions mais non sur leur montant, celui-ci étant tributaire de l'appréciation du tribunal ou difficile à chiffrer (<ref-law>). Dans ce cadre, le juge dispose d'un large pouvoir d'appréciation, non seulement dans la manière de répartir les frais, mais déjà lorsqu'il s'agit de déterminer s'il veut s'écarter des règles générales prescrites à l'<ref-law> (<ref-ruling> consid. 3 p. 360 s.). Comme chaque fois que le juge statue selon les règles du droit et de l'équité, le Tribunal fédéral ne revoit qu'avec réserve la décision prise en dernière instance cantonale. Il intervient lorsque l'autorité précédente s'écarte sans raison des règles établies par la doctrine et la jurisprudence en matière de libre appréciation, lorsqu'elle repose sur des faits qui, dans le cas particulier, ne devaient jouer aucun rôle ou, au contraire, lorsqu'elle ignore des éléments qui auraient absolument dû être pris en considération; en outre, le Tribunal fédéral redresse les décisions rendues en vertu d'un pouvoir d'appréciation lorsqu'elles aboutissent à un résultat manifestement injuste ou à une iniquité choquante (entre autres, <ref-ruling> consid. 11.2 p. 98).
4.2. Contrairement à ce que le recourant prétend, la cour cantonale n'a pas réparti les dépens selon les règles générales posées à l'<ref-law>, mais a procédé à une répartition en équité conformément à l'<ref-law>. La compensation des dépens, en première et en deuxième instance, tient compte du fait que le recourant obtient gain de cause sur le principe du caractère injustifié du licenciement immédiat, mais ne se voit allouer que le quart de ses conclusions en paiement. Une telle répartition ne consacre manifestement pas un abus du pouvoir d'appréciation réservé au juge par l'<ref-law>. Le grief tiré d'une violation du droit fédéral est dès lors mal fondé.
5.
Sur le vu de ce qui précède, le recours doit être admis très partiellement, le recourant n'obtenant gain de cause que sur le montant de sa prétention en indemnisation des vacances, qui passe de 602 fr.45 à 652 fr.70.
Dans ces conditions et comme l'assistance judiciaire a été accordée au recourant, il se justifie de renoncer à percevoir des frais judiciaires (art. 64 al. 1, art. 66 al. 1 2ème phrase LTF). Succombant dans une large mesure, le recourant au bénéfice de l'assistance judiciaire n'est pas dispensé de payer à l'intimée des dépens (cf.<ref-ruling> consid. 2c p. 324 s.), lesquels seront légèrement réduits (art. 68 al. 1 et 2 LTF). La caisse du Tribunal fédéral versera au mandataire du recourant une indemnité à titre d'honoraires d'avocat d'office (art. 64 al. 2 2ème phrase LTF).

Par ces motifs, le Tribunal fédéral prononce:
1.
Le recours est admis partiellement.
Le chiffre II/I du dispositif de l'arrêt attaqué est réformé en ce sens que Z._ SA est débitrice de X._ et lui doit immédiatement paiement des montants de 652 fr.70 et 4'150 fr., le tout plus intérêt à 5% l'an dès le 8 juin 2013.
L'arrêt attaqué est confirmé pour le surplus.
2.
Il n'est pas perçu de frais judiciaires.
3.
Le recourant versera à l'intimée une indemnité de 2'000 fr. à titre de dépens réduits.
4.
La caisse du Tribunal fédéral versera à Me Vincent Demierre une indemnité de 2'500 fr. titre d'honoraires d'avocat d'office.
5.
Le présent arrêt est communiqué aux mandataires des parties et à la Cour d'appel civile du Tribunal cantonal du canton de Vaud.
Lausanne, le 13 décembre 2016
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Kiss
La Greffière : Godat Zimmermann