I'm not sure which rules are designed to add another, different answer for the same question. But here is another, different way to do this. If I have to add this to my first answer, I can do it.
You can add text labels manually using text commands. I think it looks better. Here is one way:
Clear[x]; funs = {Exp[x], 2^x, 3^x}; funNames = Style[
Highlight the end result (add some indentation to select the range so that the added labels are fully visible)
Plot[funs, {x, from, to}, PlotRangePadding -> {1, 1}, PlotStyle -> {Red, Green, Blue}, PlotRange -> All, Epilog -> text ]

update (1)
Sam asked for an easier way. I'm not sure now. But one way to make it easier to use this method is to create a function and then just call that function once to create text labels. You can put this function where all your functions you use all the time, and just call it.
Here's something: write a function first
(*version 1.1*) myLegend[funs_List, (*list of functions to plot*) x_, (*the independent variable*) from_?(NumericQ[
And now just call it anytime you want to build shortcuts. This will be just 1-2 extra lines of code. eg:
Clear[x] from = -5; to = 2; funs = {Exp[x], 2^x, 3^x}; Plot[funs, {x, from, to}, PlotRangePadding -> {1, 1}, PlotStyle -> {Red, Green, Blue}, PlotRange -> All, Epilog -> myLegend[funs, x, from, to]]

Here are some examples:

You can change it as you wish.