histreedit is also pretty useful especially when a substitution fails.
shopt -s histreedit
If set, and readline is being used, a user is given the opportunity to re-edit a failed history substitution.
shopt -s histverify