Here is what I do when I'm "all over the place" and because of that, I do nothing. I sit down and on a lined tablet make two columns. In this case the columns would be labeled with "Stay" and "Go". Then, in no particular order, you write down the reasons to stay and the reasons to go. Once you make the list, set it aside for a day and then at some point each day for the next couple of days you add to it (you won't get them all the first run through it).
Now comes the hard part, but the most important part. Detach yourself as best you can and look at, weigh and evaluate the two columns as if they were written by a good friend in exactly your situation, who had asked you for advice.
Don't, insofar as possible, add things to the "Stay" column that are "I can settle for this" things. This side of the page is only for things that absolutely make you want to stay, and are specific things. For example "he is a good guy" does not go there. If you feel/think this, list what makes him a good guy. Do the same on the other side. For example if you start to list a negative, be specific. Not "he gets angry". List exactly what he gets angry about and add to it whether or not you have talked to him about it, and he has or has not made any headway in resolving the problem.
After all that comes decision time and this is tough to. You'll have the information to make the decision, but it still won't be easy. I know, been there and done that. If you try this approach and still have questions, I'd be happy to tell you how I arrived at my final decision.