JakTheGripper t1_j6p22bk wrote

Tell him you'll give him $20 every time you lash out at him, and hold to your end of the deal. In fact, hand him $100 cash up front, and tell him to give back whatever remains at the end of the month. You'll stop or go broke.

Edit: See, right now there's not enough incentive for you to change in a hurry because he hasn't walked out on you. You can take your time working on changing because you're safe, and he's tolerant. You gotta make it hurt, gotta make it really uncomfortable for you to be mean to him. Put up some money.